{
  "version":"2.0",
  "metadata":{
    "apiVersion":"2018-05-10",
    "endpointPrefix":"codeguru-security",
    "jsonVersion":"1.1",
    "protocol":"rest-json",
    "protocols":["rest-json"],
    "serviceFullName":"Amazon CodeGuru Security",
    "serviceId":"CodeGuru Security",
    "signatureVersion":"v4",
    "signingName":"codeguru-security",
    "uid":"codeguru-security-2018-05-10"
  },
  "operations":{
    "BatchGetFindings":{
      "name":"BatchGetFindings",
      "http":{
        "method":"POST",
        "requestUri":"/batchGetFindings",
        "responseCode":200
      },
      "input":{"shape":"BatchGetFindingsRequest"},
      "output":{"shape":"BatchGetFindingsResponse"},
      "errors":[
        {"shape":"InternalServerException"},
        {"shape":"ThrottlingException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"}
      ],
      "documentation":"<p>Returns a list of requested findings from standard scans.</p>"
    },
    "CreateScan":{
      "name":"CreateScan",
      "http":{
        "method":"POST",
        "requestUri":"/scans",
        "responseCode":200
      },
      "input":{"shape":"CreateScanRequest"},
      "output":{"shape":"CreateScanResponse"},
      "errors":[
        {"shape":"InternalServerException"},
        {"shape":"ConflictException"},
        {"shape":"ResourceNotFoundException"},
        {"shape":"ThrottlingException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"}
      ],
      "documentation":"<p>Use to create a scan using code uploaded to an Amazon S3 bucket.</p>"
    },
    "CreateUploadUrl":{
      "name":"CreateUploadUrl",
      "http":{
        "method":"POST",
        "requestUri":"/uploadUrl",
        "responseCode":200
      },
      "input":{"shape":"CreateUploadUrlRequest"},
      "output":{"shape":"CreateUploadUrlResponse"},
      "errors":[
        {"shape":"InternalServerException"},
        {"shape":"ThrottlingException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"}
      ],
      "documentation":"<p>Generates a pre-signed URL, request headers used to upload a code resource, and code artifact identifier for the uploaded resource.</p> <p>You can upload your code resource to the URL with the request headers using any HTTP client.</p>"
    },
    "GetAccountConfiguration":{
      "name":"GetAccountConfiguration",
      "http":{
        "method":"GET",
        "requestUri":"/accountConfiguration/get",
        "responseCode":200
      },
      "input":{"shape":"GetAccountConfigurationRequest"},
      "output":{"shape":"GetAccountConfigurationResponse"},
      "errors":[
        {"shape":"InternalServerException"},
        {"shape":"ThrottlingException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"}
      ],
      "documentation":"<p>Use to get the encryption configuration for an account.</p>"
    },
    "GetFindings":{
      "name":"GetFindings",
      "http":{
        "method":"GET",
        "requestUri":"/findings/{scanName}",
        "responseCode":200
      },
      "input":{"shape":"GetFindingsRequest"},
      "output":{"shape":"GetFindingsResponse"},
      "errors":[
        {"shape":"InternalServerException"},
        {"shape":"ConflictException"},
        {"shape":"ResourceNotFoundException"},
        {"shape":"ThrottlingException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"}
      ],
      "documentation":"<p>Returns a list of all findings generated by a particular scan.</p>"
    },
    "GetMetricsSummary":{
      "name":"GetMetricsSummary",
      "http":{
        "method":"GET",
        "requestUri":"/metrics/summary",
        "responseCode":200
      },
      "input":{"shape":"GetMetricsSummaryRequest"},
      "output":{"shape":"GetMetricsSummaryResponse"},
      "errors":[
        {"shape":"InternalServerException"},
        {"shape":"ThrottlingException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"}
      ],
      "documentation":"<p>Returns a summary of metrics for an account from a specified date, including number of open findings, the categories with most findings, the scans with most open findings, and scans with most open critical findings. </p>"
    },
    "GetScan":{
      "name":"GetScan",
      "http":{
        "method":"GET",
        "requestUri":"/scans/{scanName}",
        "responseCode":200
      },
      "input":{"shape":"GetScanRequest"},
      "output":{"shape":"GetScanResponse"},
      "errors":[
        {"shape":"InternalServerException"},
        {"shape":"ResourceNotFoundException"},
        {"shape":"ThrottlingException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"}
      ],
      "documentation":"<p>Returns details about a scan, including whether or not a scan has completed.</p>"
    },
    "ListFindingsMetrics":{
      "name":"ListFindingsMetrics",
      "http":{
        "method":"GET",
        "requestUri":"/metrics/findings",
        "responseCode":200
      },
      "input":{"shape":"ListFindingsMetricsRequest"},
      "output":{"shape":"ListFindingsMetricsResponse"},
      "errors":[
        {"shape":"InternalServerException"},
        {"shape":"ThrottlingException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"}
      ],
      "documentation":"<p>Returns metrics about all findings in an account within a specified time range.</p>"
    },
    "ListScans":{
      "name":"ListScans",
      "http":{
        "method":"GET",
        "requestUri":"/scans",
        "responseCode":200
      },
      "input":{"shape":"ListScansRequest"},
      "output":{"shape":"ListScansResponse"},
      "errors":[
        {"shape":"InternalServerException"},
        {"shape":"ThrottlingException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"}
      ],
      "documentation":"<p>Returns a list of all scans in an account. Does not return <code>EXPRESS</code> scans.</p>"
    },
    "ListTagsForResource":{
      "name":"ListTagsForResource",
      "http":{
        "method":"GET",
        "requestUri":"/tags/{resourceArn}",
        "responseCode":200
      },
      "input":{"shape":"ListTagsForResourceRequest"},
      "output":{"shape":"ListTagsForResourceResponse"},
      "errors":[
        {"shape":"InternalServerException"},
        {"shape":"ConflictException"},
        {"shape":"ResourceNotFoundException"},
        {"shape":"ThrottlingException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"}
      ],
      "documentation":"<p>Returns a list of all tags associated with a scan.</p>"
    },
    "TagResource":{
      "name":"TagResource",
      "http":{
        "method":"POST",
        "requestUri":"/tags/{resourceArn}",
        "responseCode":204
      },
      "input":{"shape":"TagResourceRequest"},
      "output":{"shape":"TagResourceResponse"},
      "errors":[
        {"shape":"InternalServerException"},
        {"shape":"ConflictException"},
        {"shape":"ResourceNotFoundException"},
        {"shape":"ThrottlingException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"}
      ],
      "documentation":"<p>Use to add one or more tags to an existing scan.</p>"
    },
    "UntagResource":{
      "name":"UntagResource",
      "http":{
        "method":"DELETE",
        "requestUri":"/tags/{resourceArn}",
        "responseCode":204
      },
      "input":{"shape":"UntagResourceRequest"},
      "output":{"shape":"UntagResourceResponse"},
      "errors":[
        {"shape":"InternalServerException"},
        {"shape":"ConflictException"},
        {"shape":"ResourceNotFoundException"},
        {"shape":"ThrottlingException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"}
      ],
      "documentation":"<p>Use to remove one or more tags from an existing scan.</p>",
      "idempotent":true
    },
    "UpdateAccountConfiguration":{
      "name":"UpdateAccountConfiguration",
      "http":{
        "method":"PUT",
        "requestUri":"/updateAccountConfiguration",
        "responseCode":200
      },
      "input":{"shape":"UpdateAccountConfigurationRequest"},
      "output":{"shape":"UpdateAccountConfigurationResponse"},
      "errors":[
        {"shape":"InternalServerException"},
        {"shape":"ResourceNotFoundException"},
        {"shape":"ThrottlingException"},
        {"shape":"ValidationException"},
        {"shape":"AccessDeniedException"}
      ],
      "documentation":"<p>Use to update the encryption configuration for an account.</p>"
    }
  },
  "shapes":{
    "AccessDeniedException":{
      "type":"structure",
      "required":[
        "errorCode",
        "message"
      ],
      "members":{
        "errorCode":{
          "shape":"String",
          "documentation":"<p>The identifier for the error.</p>"
        },
        "message":{
          "shape":"String",
          "documentation":"<p>Description of the error.</p>"
        },
        "resourceId":{
          "shape":"String",
          "documentation":"<p>The identifier for the resource you don't have access to.</p>"
        },
        "resourceType":{
          "shape":"String",
          "documentation":"<p>The type of resource you don't have access to.</p>"
        }
      },
      "documentation":"<p>You do not have sufficient access to perform this action.</p>",
      "error":{
        "httpStatusCode":403,
        "senderFault":true
      },
      "exception":true
    },
    "AccountFindingsMetric":{
      "type":"structure",
      "members":{
        "closedFindings":{
          "shape":"FindingMetricsValuePerSeverity",
          "documentation":"<p>The number of closed findings of each severity on the specified date.</p>"
        },
        "date":{
          "shape":"Timestamp",
          "documentation":"<p>The date from which the findings metrics were retrieved.</p>"
        },
        "meanTimeToClose":{
          "shape":"FindingMetricsValuePerSeverity",
          "documentation":"<p>The average time in days it takes to close findings of each severity as of a specified date.</p>"
        },
        "newFindings":{
          "shape":"FindingMetricsValuePerSeverity",
          "documentation":"<p>The number of new findings of each severity on the specified date.</p>"
        },
        "openFindings":{
          "shape":"FindingMetricsValuePerSeverity",
          "documentation":"<p>The number of open findings of each severity as of the specified date.</p>"
        }
      },
      "documentation":"<p>A summary of findings metrics for an account on a specified date.</p>"
    },
    "AnalysisType":{
      "type":"string",
      "enum":[
        "Security",
        "All"
      ]
    },
    "BatchGetFindingsError":{
      "type":"structure",
      "required":[
        "errorCode",
        "findingId",
        "message",
        "scanName"
      ],
      "members":{
        "errorCode":{
          "shape":"ErrorCode",
          "documentation":"<p>A code associated with the type of error.</p>"
        },
        "findingId":{
          "shape":"String",
          "documentation":"<p>The finding ID of the finding that was not fetched.</p>"
        },
        "message":{
          "shape":"String",
          "documentation":"<p>Describes the error.</p>"
        },
        "scanName":{
          "shape":"ScanName",
          "documentation":"<p>The name of the scan that generated the finding.</p>"
        }
      },
      "documentation":"<p>Contains information about the error that caused a finding to fail to be retrieved.</p>"
    },
    "BatchGetFindingsErrors":{
      "type":"list",
      "member":{"shape":"BatchGetFindingsError"}
    },
    "BatchGetFindingsRequest":{
      "type":"structure",
      "required":["findingIdentifiers"],
      "members":{
        "findingIdentifiers":{
          "shape":"FindingIdentifiers",
          "documentation":"<p>A list of finding identifiers. Each identifier consists of a <code>scanName</code> and a <code>findingId</code>. You retrieve the <code>findingId</code> when you call <code>GetFindings</code>.</p>"
        }
      }
    },
    "BatchGetFindingsResponse":{
      "type":"structure",
      "required":[
        "failedFindings",
        "findings"
      ],
      "members":{
        "failedFindings":{
          "shape":"BatchGetFindingsErrors",
          "documentation":"<p>A list of errors for individual findings which were not fetched. Each BatchGetFindingsError contains the <code>scanName</code>, <code>findingId</code>, <code>errorCode</code> and error <code>message</code>.</p>"
        },
        "findings":{
          "shape":"Findings",
          "documentation":"<p> A list of all findings which were successfully fetched.</p>"
        }
      }
    },
    "CategoriesWithMostFindings":{
      "type":"list",
      "member":{"shape":"CategoryWithFindingNum"},
      "max":5,
      "min":0
    },
    "CategoryWithFindingNum":{
      "type":"structure",
      "members":{
        "categoryName":{
          "shape":"String",
          "documentation":"<p>The name of the finding category. A finding category is determined by the detector that detected the finding.</p>"
        },
        "findingNumber":{
          "shape":"Integer",
          "documentation":"<p>The number of open findings in the category.</p>"
        }
      },
      "documentation":"<p>Information about a finding category with open findings.</p>"
    },
    "ClientToken":{
      "type":"string",
      "max":64,
      "min":1,
      "pattern":"^[\\S]+$"
    },
    "CodeLine":{
      "type":"structure",
      "members":{
        "content":{
          "shape":"String",
          "documentation":"<p>The code that contains a vulnerability.</p>"
        },
        "number":{
          "shape":"Integer",
          "documentation":"<p>The code line number.</p>"
        }
      },
      "documentation":"<p>The line of code where a finding was detected.</p>"
    },
    "CodeSnippet":{
      "type":"list",
      "member":{"shape":"CodeLine"}
    },
    "ConflictException":{
      "type":"structure",
      "required":[
        "errorCode",
        "message",
        "resourceId",
        "resourceType"
      ],
      "members":{
        "errorCode":{
          "shape":"String",
          "documentation":"<p>The identifier for the error.</p>"
        },
        "message":{
          "shape":"String",
          "documentation":"<p>Description of the error.</p>"
        },
        "resourceId":{
          "shape":"String",
          "documentation":"<p>The identifier for the service resource associated with the request.</p>"
        },
        "resourceType":{
          "shape":"String",
          "documentation":"<p>The type of resource associated with the request.</p>"
        }
      },
      "documentation":"<p>The requested operation would cause a conflict with the current state of a service resource associated with the request. Resolve the conflict before retrying this request.</p>",
      "error":{
        "httpStatusCode":409,
        "senderFault":true
      },
      "exception":true
    },
    "CreateScanRequest":{
      "type":"structure",
      "required":[
        "resourceId",
        "scanName"
      ],
      "members":{
        "analysisType":{
          "shape":"AnalysisType",
          "documentation":"<p>The type of analysis you want CodeGuru Security to perform in the scan, either <code>Security</code> or <code>All</code>. The <code>Security</code> type only generates findings related to security. The <code>All</code> type generates both security findings and quality findings. Defaults to <code>Security</code> type if missing.</p>"
        },
        "clientToken":{
          "shape":"ClientToken",
          "documentation":"<p>The idempotency token for the request. Amazon CodeGuru Security uses this value to prevent the accidental creation of duplicate scans if there are failures and retries.</p>",
          "idempotencyToken":true
        },
        "resourceId":{
          "shape":"ResourceId",
          "documentation":"<p>The identifier for the resource object to be scanned.</p>"
        },
        "scanName":{
          "shape":"ScanName",
          "documentation":"<p>The unique name that CodeGuru Security uses to track revisions across multiple scans of the same resource. Only allowed for a <code>STANDARD</code> scan type. </p>"
        },
        "scanType":{
          "shape":"ScanType",
          "documentation":"<p>The type of scan, either <code>Standard</code> or <code>Express</code>. Defaults to <code>Standard</code> type if missing.</p> <p> <code>Express</code> scans run on limited resources and use a limited set of detectors to analyze your code in near-real time. <code>Standard</code> scans have standard resource limits and use the full set of detectors to analyze your code.</p>"
        },
        "tags":{
          "shape":"TagMap",
          "documentation":"<p>An array of key-value pairs used to tag a scan. A tag is a custom attribute label with two parts:</p> <ul> <li> <p>A tag key. For example, <code>CostCenter</code>, <code>Environment</code>, or <code>Secret</code>. Tag keys are case sensitive.</p> </li> <li> <p>An optional tag value field. For example, <code>111122223333</code>, <code>Production</code>, or a team name. Omitting the tag value is the same as using an empty string. Tag values are case sensitive.</p> </li> </ul>"
        }
      }
    },
    "CreateScanResponse":{
      "type":"structure",
      "required":[
        "resourceId",
        "runId",
        "scanName",
        "scanState"
      ],
      "members":{
        "resourceId":{
          "shape":"ResourceId",
          "documentation":"<p>The identifier for the resource object that contains resources that were scanned.</p>"
        },
        "runId":{
          "shape":"Uuid",
          "documentation":"<p>UUID that identifies the individual scan run.</p>"
        },
        "scanName":{
          "shape":"ScanName",
          "documentation":"<p>The name of the scan.</p>"
        },
        "scanNameArn":{
          "shape":"ScanNameArn",
          "documentation":"<p>The ARN for the scan name.</p>"
        },
        "scanState":{
          "shape":"ScanState",
          "documentation":"<p>The current state of the scan. Returns either <code>InProgress</code>, <code>Successful</code>, or <code>Failed</code>.</p>"
        }
      }
    },
    "CreateUploadUrlRequest":{
      "type":"structure",
      "required":["scanName"],
      "members":{
        "scanName":{
          "shape":"ScanName",
          "documentation":"<p>The name of the scan that will use the uploaded resource. CodeGuru Security uses the unique scan name to track revisions across multiple scans of the same resource. Use this <code>scanName</code> when you call <code>CreateScan</code> on the code resource you upload to this URL.</p>"
        }
      }
    },
    "CreateUploadUrlResponse":{
      "type":"structure",
      "required":[
        "codeArtifactId",
        "requestHeaders",
        "s3Url"
      ],
      "members":{
        "codeArtifactId":{
          "shape":"Uuid",
          "documentation":"<p>The identifier for the uploaded code resource. Pass this to <code>CreateScan</code> to use the uploaded resources.</p>"
        },
        "requestHeaders":{
          "shape":"RequestHeaderMap",
          "documentation":"<p>A set of key-value pairs that contain the required headers when uploading your resource.</p>"
        },
        "s3Url":{
          "shape":"S3Url",
          "documentation":"<p>A pre-signed S3 URL. You can upload the code file you want to scan with the required <code>requestHeaders</code> using any HTTP client.</p>"
        }
      }
    },
    "DetectorTags":{
      "type":"list",
      "member":{"shape":"String"}
    },
    "Double":{
      "type":"double",
      "box":true
    },
    "EncryptionConfig":{
      "type":"structure",
      "members":{
        "kmsKeyArn":{
          "shape":"KmsKeyArn",
          "documentation":"<p>The KMS key ARN that is used for encryption. If an AWS-managed key is used for encryption, returns empty.</p>"
        }
      },
      "documentation":"<p>Information about the encryption configuration for an account. Required to call <code>UpdateAccountConfiguration</code>.</p>"
    },
    "ErrorCode":{
      "type":"string",
      "enum":[
        "DUPLICATE_IDENTIFIER",
        "ITEM_DOES_NOT_EXIST",
        "INTERNAL_ERROR",
        "INVALID_FINDING_ID",
        "INVALID_SCAN_NAME"
      ]
    },
    "ErrorMessage":{
      "type":"string",
      "min":1
    },
    "FilePath":{
      "type":"structure",
      "members":{
        "codeSnippet":{
          "shape":"CodeSnippet",
          "documentation":"<p>A list of <code>CodeLine</code> objects that describe where the security vulnerability appears in your code.</p>"
        },
        "endLine":{
          "shape":"Integer",
          "documentation":"<p>The last line number of the code snippet where the security vulnerability appears in your code.</p>"
        },
        "name":{
          "shape":"String",
          "documentation":"<p>The name of the file.</p>"
        },
        "path":{
          "shape":"String",
          "documentation":"<p>The path to the resource with the security vulnerability.</p>"
        },
        "startLine":{
          "shape":"Integer",
          "documentation":"<p>The first line number of the code snippet where the security vulnerability appears in your code.</p>"
        }
      },
      "documentation":"<p>Information about the location of security vulnerabilities that Amazon CodeGuru Security detected in your code.</p>"
    },
    "Finding":{
      "type":"structure",
      "members":{
        "createdAt":{
          "shape":"Timestamp",
          "documentation":"<p>The time when the finding was created.</p>"
        },
        "description":{
          "shape":"String",
          "documentation":"<p>A description of the finding.</p>"
        },
        "detectorId":{
          "shape":"String",
          "documentation":"<p>The identifier for the detector that detected the finding in your code. A detector is a defined rule based on industry standards and AWS best practices. </p>"
        },
        "detectorName":{
          "shape":"String",
          "documentation":"<p>The name of the detector that identified the security vulnerability in your code. </p>"
        },
        "detectorTags":{
          "shape":"DetectorTags",
          "documentation":"<p>One or more tags or categorizations that are associated with a detector. These tags are defined by type, programming language, or other classification such as maintainability or consistency.</p>"
        },
        "generatorId":{
          "shape":"String",
          "documentation":"<p>The identifier for the component that generated a finding such as AmazonCodeGuruSecurity.</p>"
        },
        "id":{
          "shape":"String",
          "documentation":"<p>The identifier for a finding.</p>"
        },
        "remediation":{
          "shape":"Remediation",
          "documentation":"<p>An object that contains the details about how to remediate a finding.</p>"
        },
        "resource":{
          "shape":"Resource",
          "documentation":"<p>The resource where Amazon CodeGuru Security detected a finding.</p>"
        },
        "ruleId":{
          "shape":"String",
          "documentation":"<p>The identifier for the rule that generated the finding.</p>"
        },
        "severity":{
          "shape":"Severity",
          "documentation":"<p>The severity of the finding. Severity can be critical, high, medium, low, or informational. For information on severity levels, see <a href=\"https://docs.aws.amazon.com/codeguru/latest/security-ug/findings-overview.html#severity-distribution\">Finding severity</a> in the <i>Amazon CodeGuru Security User Guide</i>.</p>"
        },
        "status":{
          "shape":"Status",
          "documentation":"<p>The status of the finding. A finding status can be open or closed. </p>"
        },
        "title":{
          "shape":"String",
          "documentation":"<p>The title of the finding.</p>"
        },
        "type":{
          "shape":"String",
          "documentation":"<p>The type of finding. </p>"
        },
        "updatedAt":{
          "shape":"Timestamp",
          "documentation":"<p>The time when the finding was last updated. Findings are updated when you remediate them or when the finding code location changes. </p>"
        },
        "vulnerability":{
          "shape":"Vulnerability",
          "documentation":"<p>An object that describes the detected security vulnerability.</p>"
        }
      },
      "documentation":"<p>Information about a finding that was detected in your code.</p>"
    },
    "FindingIdentifier":{
      "type":"structure",
      "required":[
        "findingId",
        "scanName"
      ],
      "members":{
        "findingId":{
          "shape":"String",
          "documentation":"<p>The identifier for a finding.</p>"
        },
        "scanName":{
          "shape":"String",
          "documentation":"<p>The name of the scan that generated the finding. </p>"
        }
      },
      "documentation":"<p>An object that contains information about a finding and the scan that generated it. </p>"
    },
    "FindingIdentifiers":{
      "type":"list",
      "member":{"shape":"FindingIdentifier"},
      "max":25,
      "min":1
    },
    "FindingMetricsValuePerSeverity":{
      "type":"structure",
      "members":{
        "critical":{
          "shape":"Double",
          "documentation":"<p>A numeric value corresponding to a critical finding.</p>"
        },
        "high":{
          "shape":"Double",
          "documentation":"<p>A numeric value corresponding to a high severity finding.</p>"
        },
        "info":{
          "shape":"Double",
          "documentation":"<p>A numeric value corresponding to an informational finding.</p>"
        },
        "low":{
          "shape":"Double",
          "documentation":"<p>A numeric value corresponding to a low severity finding.</p>"
        },
        "medium":{
          "shape":"Double",
          "documentation":"<p>A numeric value corresponding to a medium severity finding.</p>"
        }
      },
      "documentation":"<p>A numeric value corresponding to the severity of a finding, such as the number of open findings or the average time it takes to close findings of a given severity.</p>"
    },
    "Findings":{
      "type":"list",
      "member":{"shape":"Finding"}
    },
    "FindingsMetricList":{
      "type":"list",
      "member":{"shape":"AccountFindingsMetric"}
    },
    "GetAccountConfigurationRequest":{
      "type":"structure",
      "members":{
      }
    },
    "GetAccountConfigurationResponse":{
      "type":"structure",
      "required":["encryptionConfig"],
      "members":{
        "encryptionConfig":{
          "shape":"EncryptionConfig",
          "documentation":"<p>An <code>EncryptionConfig</code> object that contains the KMS key ARN that is used for encryption. By default, CodeGuru Security uses an AWS-managed key for encryption. To specify your own key, call <code>UpdateAccountConfiguration</code>. If you do not specify a customer-managed key, returns empty.</p>"
        }
      }
    },
    "GetFindingsRequest":{
      "type":"structure",
      "required":["scanName"],
      "members":{
        "maxResults":{
          "shape":"GetFindingsRequestMaxResultsInteger",
          "documentation":"<p>The maximum number of results to return in the response. Use this parameter when paginating results. If additional results exist beyond the number you specify, the <code>nextToken</code> element is returned in the response. Use <code>nextToken</code> in a subsequent request to retrieve additional results. If not specified, returns 1000 results.</p>",
          "location":"querystring",
          "locationName":"maxResults"
        },
        "nextToken":{
          "shape":"NextToken",
          "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request. For subsequent calls, use the <code>nextToken</code> value returned from the previous request to continue listing results after the first page.</p>",
          "location":"querystring",
          "locationName":"nextToken"
        },
        "scanName":{
          "shape":"ScanName",
          "documentation":"<p>The name of the scan you want to retrieve findings from.</p>",
          "location":"uri",
          "locationName":"scanName"
        },
        "status":{
          "shape":"Status",
          "documentation":"<p>The status of the findings you want to get. Pass either <code>Open</code>, <code>Closed</code>, or <code>All</code>.</p>",
          "location":"querystring",
          "locationName":"status"
        }
      }
    },
    "GetFindingsRequestMaxResultsInteger":{
      "type":"integer",
      "box":true,
      "max":1000,
      "min":1
    },
    "GetFindingsResponse":{
      "type":"structure",
      "members":{
        "findings":{
          "shape":"Findings",
          "documentation":"<p>A list of findings generated by the specified scan.</p>"
        },
        "nextToken":{
          "shape":"NextToken",
          "documentation":"<p>A pagination token. You can use this in future calls to <code>GetFindings</code> to continue listing results after the current page. </p>"
        }
      }
    },
    "GetMetricsSummaryRequest":{
      "type":"structure",
      "required":["date"],
      "members":{
        "date":{
          "shape":"Timestamp",
          "documentation":"<p>The date you want to retrieve summary metrics from, rounded to the nearest day. The date must be within the past two years.</p>",
          "location":"querystring",
          "locationName":"date"
        }
      }
    },
    "GetMetricsSummaryResponse":{
      "type":"structure",
      "members":{
        "metricsSummary":{
          "shape":"MetricsSummary",
          "documentation":"<p>The summary metrics from the specified date.</p>"
        }
      }
    },
    "GetScanRequest":{
      "type":"structure",
      "required":["scanName"],
      "members":{
        "runId":{
          "shape":"Uuid",
          "documentation":"<p>UUID that identifies the individual scan run you want to view details about. You retrieve this when you call the <code>CreateScan</code> operation. Defaults to the latest scan run if missing.</p>",
          "location":"querystring",
          "locationName":"runId"
        },
        "scanName":{
          "shape":"ScanName",
          "documentation":"<p>The name of the scan you want to view details about.</p>",
          "location":"uri",
          "locationName":"scanName"
        }
      }
    },
    "GetScanResponse":{
      "type":"structure",
      "required":[
        "analysisType",
        "createdAt",
        "runId",
        "scanName",
        "scanState"
      ],
      "members":{
        "analysisType":{
          "shape":"AnalysisType",
          "documentation":"<p>The type of analysis CodeGuru Security performed in the scan, either <code>Security</code> or <code>All</code>. The <code>Security</code> type only generates findings related to security. The <code>All</code> type generates both security findings and quality findings.</p>"
        },
        "createdAt":{
          "shape":"Timestamp",
          "documentation":"<p>The time the scan was created.</p>"
        },
        "errorMessage":{
          "shape":"ErrorMessage",
          "documentation":"<p>Details about the error that causes a scan to fail to be retrieved.</p>"
        },
        "numberOfRevisions":{
          "shape":"Long",
          "documentation":"<p>The number of times a scan has been re-run on a revised resource.</p>"
        },
        "runId":{
          "shape":"Uuid",
          "documentation":"<p>UUID that identifies the individual scan run.</p>"
        },
        "scanName":{
          "shape":"ScanName",
          "documentation":"<p>The name of the scan.</p>"
        },
        "scanNameArn":{
          "shape":"ScanNameArn",
          "documentation":"<p>The ARN for the scan name.</p>"
        },
        "scanState":{
          "shape":"ScanState",
          "documentation":"<p>The current state of the scan. Returns either <code>InProgress</code>, <code>Successful</code>, or <code>Failed</code>.</p>"
        },
        "updatedAt":{
          "shape":"Timestamp",
          "documentation":"<p>The time when the scan was last updated. Only available for <code>STANDARD</code> scan types.</p>"
        }
      }
    },
    "HeaderKey":{
      "type":"string",
      "min":1
    },
    "HeaderValue":{
      "type":"string",
      "min":1
    },
    "Integer":{
      "type":"integer",
      "box":true
    },
    "InternalServerException":{
      "type":"structure",
      "members":{
        "error":{
          "shape":"String",
          "documentation":"<p>The internal error encountered by the server.</p>"
        },
        "message":{
          "shape":"String",
          "documentation":"<p>Description of the error.</p>"
        }
      },
      "documentation":"<p>The server encountered an internal error and is unable to complete the request.</p>",
      "error":{"httpStatusCode":500},
      "exception":true,
      "fault":true,
      "retryable":{"throttling":false}
    },
    "KmsKeyArn":{
      "type":"string",
      "max":2048,
      "min":1,
      "pattern":"^arn:aws:kms:[\\S]+:[\\d]{12}:key\\/(([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})|(mrk-[0-9a-zA-Z]{32}))$"
    },
    "ListFindingsMetricsRequest":{
      "type":"structure",
      "required":[
        "endDate",
        "startDate"
      ],
      "members":{
        "endDate":{
          "shape":"Timestamp",
          "documentation":"<p>The end date of the interval which you want to retrieve metrics from. Round to the nearest day.</p>",
          "location":"querystring",
          "locationName":"endDate"
        },
        "maxResults":{
          "shape":"ListFindingsMetricsRequestMaxResultsInteger",
          "documentation":"<p>The maximum number of results to return in the response. Use this parameter when paginating results. If additional results exist beyond the number you specify, the <code>nextToken</code> element is returned in the response. Use <code>nextToken</code> in a subsequent request to retrieve additional results. If not specified, returns 1000 results.</p>",
          "location":"querystring",
          "locationName":"maxResults"
        },
        "nextToken":{
          "shape":"NextToken",
          "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request. For subsequent calls, use the <code>nextToken</code> value returned from the previous request to continue listing results after the first page.</p>",
          "location":"querystring",
          "locationName":"nextToken"
        },
        "startDate":{
          "shape":"Timestamp",
          "documentation":"<p>The start date of the interval which you want to retrieve metrics from. Rounds to the nearest day.</p>",
          "location":"querystring",
          "locationName":"startDate"
        }
      }
    },
    "ListFindingsMetricsRequestMaxResultsInteger":{
      "type":"integer",
      "box":true,
      "max":1000,
      "min":1
    },
    "ListFindingsMetricsResponse":{
      "type":"structure",
      "members":{
        "findingsMetrics":{
          "shape":"FindingsMetricList",
          "documentation":"<p>A list of <code>AccountFindingsMetric</code> objects retrieved from the specified time interval.</p>"
        },
        "nextToken":{
          "shape":"NextToken",
          "documentation":"<p>A pagination token. You can use this in future calls to <code>ListFindingMetrics</code> to continue listing results after the current page. </p>"
        }
      }
    },
    "ListScansRequest":{
      "type":"structure",
      "members":{
        "maxResults":{
          "shape":"ListScansRequestMaxResultsInteger",
          "documentation":"<p>The maximum number of results to return in the response. Use this parameter when paginating results. If additional results exist beyond the number you specify, the <code>nextToken</code> element is returned in the response. Use <code>nextToken</code> in a subsequent request to retrieve additional results. If not specified, returns 100 results.</p>",
          "location":"querystring",
          "locationName":"maxResults"
        },
        "nextToken":{
          "shape":"NextToken",
          "documentation":"<p>A token to use for paginating results that are returned in the response. Set the value of this parameter to null for the first request. For subsequent calls, use the <code>nextToken</code> value returned from the previous request to continue listing results after the first page.</p>",
          "location":"querystring",
          "locationName":"nextToken"
        }
      }
    },
    "ListScansRequestMaxResultsInteger":{
      "type":"integer",
      "box":true,
      "max":100,
      "min":1
    },
    "ListScansResponse":{
      "type":"structure",
      "members":{
        "nextToken":{
          "shape":"NextToken",
          "documentation":"<p>A pagination token. You can use this in future calls to <code>ListScans</code> to continue listing results after the current page.</p>"
        },
        "summaries":{
          "shape":"ScanSummaries",
          "documentation":"<p>A list of <code>ScanSummary</code> objects with information about all scans in an account.</p>"
        }
      }
    },
    "ListTagsForResourceRequest":{
      "type":"structure",
      "required":["resourceArn"],
      "members":{
        "resourceArn":{
          "shape":"ScanNameArn",
          "documentation":"<p>The ARN of the <code>ScanName</code> object. You can retrieve this ARN by calling <code>CreateScan</code>, <code>ListScans</code>, or <code>GetScan</code>.</p>",
          "location":"uri",
          "locationName":"resourceArn"
        }
      }
    },
    "ListTagsForResourceResponse":{
      "type":"structure",
      "members":{
        "tags":{
          "shape":"TagMap",
          "documentation":"<p>An array of key-value pairs used to tag an existing scan. A tag is a custom attribute label with two parts:</p> <ul> <li> <p>A tag key. For example, <code>CostCenter</code>, <code>Environment</code>, or <code>Secret</code>. Tag keys are case sensitive.</p> </li> <li> <p>An optional tag value field. For example, <code>111122223333</code>, <code>Production</code>, or a team name. Omitting the tag value is the same as using an empty string. Tag values are case sensitive.</p> </li> </ul>"
        }
      }
    },
    "Long":{
      "type":"long",
      "box":true
    },
    "MetricsSummary":{
      "type":"structure",
      "members":{
        "categoriesWithMostFindings":{
          "shape":"CategoriesWithMostFindings",
          "documentation":"<p>A list of <code>CategoryWithFindingNum</code> objects for the top 5 finding categories with the most findings.</p>"
        },
        "date":{
          "shape":"Timestamp",
          "documentation":"<p>The date from which the metrics summary information was retrieved.</p>"
        },
        "openFindings":{
          "shape":"FindingMetricsValuePerSeverity",
          "documentation":"<p>The number of open findings of each severity.</p>"
        },
        "scansWithMostOpenCriticalFindings":{
          "shape":"ScansWithMostOpenCriticalFindings",
          "documentation":"<p>A list of <code>ScanNameWithFindingNum</code> objects for the top 3 scans with the most number of open critical findings.</p>"
        },
        "scansWithMostOpenFindings":{
          "shape":"ScansWithMostOpenFindings",
          "documentation":"<p>A list of <code>ScanNameWithFindingNum</code> objects for the top 3 scans with the most number of open findings.</p>"
        }
      },
      "documentation":"<p>A summary of metrics for an account as of a specified date.</p>"
    },
    "NextToken":{
      "type":"string",
      "max":2048,
      "min":1,
      "pattern":"^[\\S]+$"
    },
    "Recommendation":{
      "type":"structure",
      "members":{
        "text":{
          "shape":"String",
          "documentation":"<p>The recommended course of action to remediate the finding.</p>"
        },
        "url":{
          "shape":"String",
          "documentation":"<p>The URL address to the recommendation for remediating the finding. </p>"
        }
      },
      "documentation":"<p>Information about the recommended course of action to remediate a finding.</p>"
    },
    "ReferenceUrls":{
      "type":"list",
      "member":{"shape":"String"}
    },
    "RelatedVulnerabilities":{
      "type":"list",
      "member":{"shape":"String"}
    },
    "Remediation":{
      "type":"structure",
      "members":{
        "recommendation":{
          "shape":"Recommendation",
          "documentation":"<p>An object that contains information about the recommended course of action to remediate a finding.</p>"
        },
        "suggestedFixes":{
          "shape":"SuggestedFixes",
          "documentation":"<p>A list of <code>SuggestedFix</code> objects. Each object contains information about a suggested code fix to remediate the finding.</p>"
        }
      },
      "documentation":"<p>Information about how to remediate a finding.</p>"
    },
    "RequestHeaderMap":{
      "type":"map",
      "key":{"shape":"HeaderKey"},
      "value":{"shape":"HeaderValue"},
      "sensitive":true
    },
    "Resource":{
      "type":"structure",
      "members":{
        "id":{
          "shape":"String",
          "documentation":"<p>The <code>scanName</code> of the scan that was run on the resource.</p>"
        },
        "subResourceId":{
          "shape":"String",
          "documentation":"<p>The identifier for a section of the resource.</p>"
        }
      },
      "documentation":"<p>Information about a resource that contains a finding.</p>"
    },
    "ResourceId":{
      "type":"structure",
      "members":{
        "codeArtifactId":{
          "shape":"Uuid",
          "documentation":"<p>The identifier for the code file uploaded to the resource object. Returned by <code>CreateUploadUrl</code> when you upload resources to be scanned.</p>"
        }
      },
      "documentation":"<p>The identifier for a resource object that contains resources to scan. Specifying a codeArtifactId is required to create a scan.</p>",
      "union":true
    },
    "ResourceNotFoundException":{
      "type":"structure",
      "required":[
        "errorCode",
        "message",
        "resourceId",
        "resourceType"
      ],
      "members":{
        "errorCode":{
          "shape":"String",
          "documentation":"<p>The identifier for the error.</p>"
        },
        "message":{
          "shape":"String",
          "documentation":"<p>Description of the error.</p>"
        },
        "resourceId":{
          "shape":"String",
          "documentation":"<p>The identifier for the resource that was not found.</p>"
        },
        "resourceType":{
          "shape":"String",
          "documentation":"<p>The type of resource that was not found.</p>"
        }
      },
      "documentation":"<p>The resource specified in the request was not found.</p>",
      "error":{
        "httpStatusCode":404,
        "senderFault":true
      },
      "exception":true
    },
    "S3Url":{
      "type":"string",
      "min":1,
      "sensitive":true
    },
    "ScanName":{
      "type":"string",
      "max":140,
      "min":1,
      "pattern":"^[a-zA-Z0-9-_$:.]*$"
    },
    "ScanNameArn":{
      "type":"string",
      "max":300,
      "min":1,
      "pattern":"^arn:aws:codeguru-security:[\\S]+:[\\d]{12}:scans\\/[a-zA-Z0-9-_$:.]*$"
    },
    "ScanNameWithFindingNum":{
      "type":"structure",
      "members":{
        "findingNumber":{
          "shape":"Integer",
          "documentation":"<p>The number of findings generated by a scan.</p>"
        },
        "scanName":{
          "shape":"String",
          "documentation":"<p>The name of the scan.</p>"
        }
      },
      "documentation":"<p>Information about the number of findings generated by a scan.</p>"
    },
    "ScanState":{
      "type":"string",
      "enum":[
        "InProgress",
        "Successful",
        "Failed"
      ]
    },
    "ScanSummaries":{
      "type":"list",
      "member":{"shape":"ScanSummary"}
    },
    "ScanSummary":{
      "type":"structure",
      "required":[
        "createdAt",
        "runId",
        "scanName",
        "scanState"
      ],
      "members":{
        "createdAt":{
          "shape":"Timestamp",
          "documentation":"<p> The time when the scan was created. </p>"
        },
        "runId":{
          "shape":"Uuid",
          "documentation":"<p>The identifier for the scan run. </p>"
        },
        "scanName":{
          "shape":"ScanName",
          "documentation":"<p>The name of the scan. </p>"
        },
        "scanNameArn":{
          "shape":"ScanNameArn",
          "documentation":"<p>The ARN for the scan name.</p>"
        },
        "scanState":{
          "shape":"ScanState",
          "documentation":"<p>The state of the scan. A scan can be <code>In Progress</code>, <code>Complete</code>, or <code>Failed</code>. </p>"
        },
        "updatedAt":{
          "shape":"Timestamp",
          "documentation":"<p>The time the scan was last updated. A scan is updated when it is re-run.</p>"
        }
      },
      "documentation":"<p>Information about a scan. </p>"
    },
    "ScanType":{
      "type":"string",
      "enum":[
        "Standard",
        "Express"
      ]
    },
    "ScansWithMostOpenCriticalFindings":{
      "type":"list",
      "member":{"shape":"ScanNameWithFindingNum"},
      "max":3,
      "min":0
    },
    "ScansWithMostOpenFindings":{
      "type":"list",
      "member":{"shape":"ScanNameWithFindingNum"},
      "max":3,
      "min":0
    },
    "Severity":{
      "type":"string",
      "enum":[
        "Critical",
        "High",
        "Medium",
        "Low",
        "Info"
      ]
    },
    "Status":{
      "type":"string",
      "enum":[
        "Closed",
        "Open",
        "All"
      ]
    },
    "String":{"type":"string"},
    "SuggestedFix":{
      "type":"structure",
      "members":{
        "code":{
          "shape":"String",
          "documentation":"<p>The suggested code fix. If applicable, includes code patch to replace your source code. </p>"
        },
        "description":{
          "shape":"String",
          "documentation":"<p>A description of the suggested code fix and why it is being suggested. </p>"
        }
      },
      "documentation":"<p>Information about the suggested code fix to remediate a finding.</p>"
    },
    "SuggestedFixes":{
      "type":"list",
      "member":{"shape":"SuggestedFix"}
    },
    "TagKey":{
      "type":"string",
      "max":128,
      "min":1
    },
    "TagKeyList":{
      "type":"list",
      "member":{"shape":"TagKey"},
      "max":200,
      "min":0
    },
    "TagMap":{
      "type":"map",
      "key":{"shape":"TagKey"},
      "value":{"shape":"TagValue"},
      "max":200,
      "min":0
    },
    "TagResourceRequest":{
      "type":"structure",
      "required":[
        "resourceArn",
        "tags"
      ],
      "members":{
        "resourceArn":{
          "shape":"ScanNameArn",
          "documentation":"<p>The ARN of the <code>ScanName</code> object. You can retrieve this ARN by calling <code>CreateScan</code>, <code>ListScans</code>, or <code>GetScan</code>.</p>",
          "location":"uri",
          "locationName":"resourceArn"
        },
        "tags":{
          "shape":"TagMap",
          "documentation":"<p>An array of key-value pairs used to tag an existing scan. A tag is a custom attribute label with two parts:</p> <ul> <li> <p>A tag key. For example, <code>CostCenter</code>, <code>Environment</code>, or <code>Secret</code>. Tag keys are case sensitive.</p> </li> <li> <p>An optional tag value field. For example, <code>111122223333</code>, <code>Production</code>, or a team name. Omitting the tag value is the same as using an empty string. Tag values are case sensitive.</p> </li> </ul>"
        }
      }
    },
    "TagResourceResponse":{
      "type":"structure",
      "members":{
      }
    },
    "TagValue":{
      "type":"string",
      "max":256,
      "min":0
    },
    "ThrottlingException":{
      "type":"structure",
      "required":[
        "errorCode",
        "message"
      ],
      "members":{
        "errorCode":{
          "shape":"String",
          "documentation":"<p>The identifier for the error.</p>"
        },
        "message":{
          "shape":"String",
          "documentation":"<p>Description of the error.</p>"
        },
        "quotaCode":{
          "shape":"String",
          "documentation":"<p>The identifier for the originating quota.</p>"
        },
        "serviceCode":{
          "shape":"String",
          "documentation":"<p>The identifier for the originating service.</p>"
        }
      },
      "documentation":"<p>The request was denied due to request throttling.</p>",
      "error":{
        "httpStatusCode":429,
        "senderFault":true
      },
      "exception":true,
      "retryable":{"throttling":true}
    },
    "Timestamp":{"type":"timestamp"},
    "UntagResourceRequest":{
      "type":"structure",
      "required":[
        "resourceArn",
        "tagKeys"
      ],
      "members":{
        "resourceArn":{
          "shape":"ScanNameArn",
          "documentation":"<p>The ARN of the <code>ScanName</code> object. You can retrieve this ARN by calling <code>CreateScan</code>, <code>ListScans</code>, or <code>GetScan</code>.</p>",
          "location":"uri",
          "locationName":"resourceArn"
        },
        "tagKeys":{
          "shape":"TagKeyList",
          "documentation":"<p>A list of keys for each tag you want to remove from a scan.</p>",
          "location":"querystring",
          "locationName":"tagKeys"
        }
      }
    },
    "UntagResourceResponse":{
      "type":"structure",
      "members":{
      }
    },
    "UpdateAccountConfigurationRequest":{
      "type":"structure",
      "required":["encryptionConfig"],
      "members":{
        "encryptionConfig":{
          "shape":"EncryptionConfig",
          "documentation":"<p>The customer-managed KMS key ARN you want to use for encryption. If not specified, CodeGuru Security will use an AWS-managed key for encryption. If you previously specified a customer-managed KMS key and want CodeGuru Security to use an AWS-managed key for encryption instead, pass nothing.</p>"
        }
      }
    },
    "UpdateAccountConfigurationResponse":{
      "type":"structure",
      "required":["encryptionConfig"],
      "members":{
        "encryptionConfig":{
          "shape":"EncryptionConfig",
          "documentation":"<p>An <code>EncryptionConfig</code> object that contains the KMS key ARN that is used for encryption. If you did not specify a customer-managed KMS key in the request, returns empty. </p>"
        }
      }
    },
    "Uuid":{
      "type":"string",
      "pattern":"^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
    },
    "ValidationException":{
      "type":"structure",
      "required":[
        "errorCode",
        "message",
        "reason"
      ],
      "members":{
        "errorCode":{
          "shape":"String",
          "documentation":"<p>The identifier for the error.</p>"
        },
        "fieldList":{
          "shape":"ValidationExceptionFieldList",
          "documentation":"<p>The field that caused the error, if applicable.</p>"
        },
        "message":{
          "shape":"String",
          "documentation":"<p>Description of the error.</p>"
        },
        "reason":{
          "shape":"ValidationExceptionReason",
          "documentation":"<p>The reason the request failed validation.</p>"
        }
      },
      "documentation":"<p>The input fails to satisfy the specified constraints.</p>",
      "error":{
        "httpStatusCode":400,
        "senderFault":true
      },
      "exception":true
    },
    "ValidationExceptionField":{
      "type":"structure",
      "required":[
        "message",
        "name"
      ],
      "members":{
        "message":{
          "shape":"String",
          "documentation":"<p>Describes the exception.</p>"
        },
        "name":{
          "shape":"String",
          "documentation":"<p>The name of the exception.</p>"
        }
      },
      "documentation":"<p>Information about a validation exception.</p>"
    },
    "ValidationExceptionFieldList":{
      "type":"list",
      "member":{"shape":"ValidationExceptionField"}
    },
    "ValidationExceptionReason":{
      "type":"string",
      "enum":[
        "unknownOperation",
        "cannotParse",
        "fieldValidationFailed",
        "other",
        "lambdaCodeShaMisMatch"
      ]
    },
    "Vulnerability":{
      "type":"structure",
      "members":{
        "filePath":{
          "shape":"FilePath",
          "documentation":"<p> An object that describes the location of the detected security vulnerability in your code.</p>"
        },
        "id":{
          "shape":"String",
          "documentation":"<p>The identifier for the vulnerability.</p>"
        },
        "itemCount":{
          "shape":"Integer",
          "documentation":"<p>The number of times the vulnerability appears in your code.</p>",
          "deprecated":true,
          "deprecatedMessage":"This shape is not used."
        },
        "referenceUrls":{
          "shape":"ReferenceUrls",
          "documentation":"<p>One or more URL addresses that contain details about a vulnerability.</p>"
        },
        "relatedVulnerabilities":{
          "shape":"RelatedVulnerabilities",
          "documentation":"<p>One or more vulnerabilities that are related to the vulnerability being described.</p>"
        }
      },
      "documentation":"<p>Information about a security vulnerability that Amazon CodeGuru Security detected.</p>"
    }
  },
  "documentation":"<note> <p>Amazon CodeGuru Security is in preview release and is subject to change.</p> </note> <p>This section provides documentation for the Amazon CodeGuru Security API operations. CodeGuru Security is a service that uses program analysis and machine learning to detect security policy violations and vulnerabilities, and recommends ways to address these security risks.</p> <p>By proactively detecting and providing recommendations for addressing security risks, CodeGuru Security improves the overall security of your application code. For more information about CodeGuru Security, see the <a href=\"https://docs.aws.amazon.com/codeguru/latest/security-ug/what-is-codeguru-security.html\">Amazon CodeGuru Security User Guide</a>. </p>"
}
