> For the complete documentation index, see [llms.txt](https://docs.arnica.io/arnica-documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.arnica.io/arnica-documentation/hardcoded-secrets/secret-detection.md).

# Secret Detection

## **Summary** <a href="#h_06251990bd" id="h_06251990bd"></a>

Arnica detects hardcoded secrets within all commits of each source code repository it scans, and defines the risk severity for each secret Identified. The risk severity is determined using Arnica's native validation logic or in the case of custom secrets, the severity is defined within the customer's [custom regex](/arnica-documentation/hardcoded-secrets/secrets-policy-settings.md#custom-secrets) detectors.

## Secret validation capabilities

Arnica maintains a library of validators used to determine the validity, risk level and exploitability of each hardcoded secret. Once a secret has been identified and validated output from these validators is used to determine the severity and priority of the secret.

## Secret Support Matrix

The complete matrix below identifies every secret type Arnica can detect and validate. Expand a secret type under **Validation details by secret type** below the matrix to view its live validation results and corresponding risks. Supported severities are **Critical**, **High**, **Medium**, **Low**, **Info**, and **Unknown**.

The following outcomes apply to every secret type:

* An **Invalid** secret is assigned **Info** severity.
* A **None** result is assigned **Unknown** severity when validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response.
* A secret type without a validator receives a **None** result and **Unknown** severity, and requires manual validation.

<table><thead><tr><th width="481.24285888671875">Secret Type</th><th align="center">Detection</th><th align="center">Validation</th></tr></thead><tbody><tr><td>Adafruit API Key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Adobe Client ID (OAuth Web)</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Adobe Client Secret</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Age secret key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Airtable API Key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Algolia API Key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Alibaba AccessKey ID</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Alibaba Secret Key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Asana Client ID</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Asana Client Secret</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Atlassian API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Auth0 Client Secret</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Authress Service Client Access Key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>AWS Access Token</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Azure Storage</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Azure Tenant ID and Access Key</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Base64 Encoded GitHub Fine-Grained Personal Access Token</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Base64 Encoded GitHub Personal Access Token</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Beamer API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Bitbucket Client ID</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Bitbucket Client Secret</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Bittrex Access Key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Bittrex Secret Key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>CircleCI API Token</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Clojars API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Codecov Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Coinbase Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Confluent Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Confluent Secret Key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Contentful delivery API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>CosmosDB Endpoint Access</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Credentials in Web URL</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Databricks API token</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Datadog Access Token</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Defined Networking API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>DigitalOcean OAuth Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>DigitalOcean OAuth Refresh Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>DigitalOcean Personal Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Discord API key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Discord client ID</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Discord client secret</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Doppler API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Droneci Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Dropbox API secret</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Dropbox long lived API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Dropbox short lived API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Duffel API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Dynatrace API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>EasyPost API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>EasyPost test API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Etsy Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Facebook Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Fastly API key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Finicity API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Finicity Client Secret</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Finicity Public Key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Finnhub Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Flickr Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Flutterwave Encryption Key</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Flutterwave Secret Key</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Frame.io API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Freshbooks Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>GCP Access Token</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>GCP API key</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Generic API Key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>GitHub App Token</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>GitHub Fine-Grained Personal Access Token</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>GitHub OAuth Access Token</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>GitHub Personal Access Token</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>GitHub Refresh Token</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>GitLab Personal Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>GitLab Pipeline Trigger Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>GitLab Runner Registration Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Gitter Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>GoCardless API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Grafana API key (or Grafana cloud API key)</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Grafana cloud API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Grafana Service Account Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>HashiCorp Terraform user/org API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Heroku API Key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>HubSpot API Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Intercom API Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>JFrog Artifactory</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>JSON Web Token</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Kraken Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Kucoin Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Kucoin Secret Key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Launchdarkly Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Linear API Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Linear Client Secret</td><td align="center">✅</td><td align="center"></td></tr><tr><td>LinkedIn Client ID</td><td align="center">✅</td><td align="center"></td></tr><tr><td>LinkedIn Client secret</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Lob API Key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Lob Publishable API Key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Mailchimp API key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Mailgun private API token</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Mailgun public validation key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Mailgun webhook signing key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>MapBox API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Mattermost Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>MessageBird API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>MessageBird Client ID</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Microsoft Teams Webhook</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Netlify Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>New Relic API Key</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>New Relic ingest browser API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>New Relic user API ID</td><td align="center">✅</td><td align="center"></td></tr><tr><td>New Relic user API Key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Npm Access Token</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Nytimes Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Okta Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>OpenAI API Key</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Plaid API Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Plaid Client ID</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Plaid Secret key</td><td align="center">✅</td><td align="center"></td></tr><tr><td>PlanetScale API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>PlanetScale OAuth token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>PlanetScale password</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Postman API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Prefect API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Private Key</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Pulumi API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>PyPI upload token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>RapidAPI Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Readme API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Rubygem API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Sendbird Access ID</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Sendbird Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>SendGrid API token</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Sendinblue API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Sentry Access Token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Shippo API token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Shopify access token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Shopify custom access token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Shopify private app access token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Shopify shared secret</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Sidekiq Secret</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Sidekiq Sensitive URL</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Slack App-level token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Slack Bot token</td><td align="center">✅</td><td align="center">✅</td></tr><tr><td>Slack Configuration access token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Slack Configuration refresh token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Slack Legacy bot token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Slack Legacy token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Slack Legacy Workspace token</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Slack User</td><td align="center">✅</td><td align="center"></td></tr><tr><td>Stripe API Token</td><td align="center">✅</td><td align="center">✅</td></tr></tbody></table>

## Secret validation types

Arnica provides 3 primary validation outcomes, as described below.

### Valid

Arnica performs various validation actions to identify the validity of each secret, such as authenticating with the identified credentials, non-intrusive fuzzing, querying DNS, and executing brute force attacks against offline resources (e.g. encrypted private keys).

Each secret type has a range of severities. For example, an encrypted private key would be classified as a `medium` severity, but if Arnica managed to brute force the passphrase to this encrypted private key, the secret will be classified as a `high` risk.

### Invalid

Based on the validation logic explained above, it might be determined that a secret is no longer valid. For example, if the client id and secret of given AWS credentials cannot be used to successfully authenticate, Arnica will determine that the secret is invalid.

In most cases, invalid secrets would be classified as `info` severity.

### None

While Arnica has many hardcoded secret validation types, certain secrets don't have validators, such as `generic API keys` - high entropy strings that can be potentially used to authenticate to various services.

The risk severity for such secrets will always be classified as `unknown`, as they require manual validation. [Custom regex](/arnica-documentation/hardcoded-secrets/secrets-policy-settings.md#custom-secrets) secrets defined by customers will have a pre-defined severity as specified in the regex configuration.

### Validation details by secret type

Select a secret type to expand its validation outcomes and risk levels.

<details>

<summary>Auth0 Client Secret</summary>

| Live validation result                                                                                   | Validation type | Risk     |
| -------------------------------------------------------------------------------------------------------- | --------------- | -------- |
| Valid client secret                                                                                      | Valid           | Critical |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info     |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown  |

</details>

<details>

<summary>AWS Access Token</summary>

| Live validation result                                                                                   | Validation type | Risk     |
| -------------------------------------------------------------------------------------------------------- | --------------- | -------- |
| Valid credentials for a root identity                                                                    | Valid           | Critical |
| Valid credentials for a service account                                                                  | Valid           | High     |
| Valid credentials for a standard identity                                                                | Valid           | High     |
| Valid credentials for a development, test, or demo environment                                           | Valid           | Medium   |
| Valid canary or honeypot credentials                                                                     | Valid           | Info     |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info     |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown  |

</details>

<details>

<summary>Azure Storage</summary>

| Live validation result                                                                                   | Validation type | Risk     |
| -------------------------------------------------------------------------------------------------------- | --------------- | -------- |
| Valid credentials for an administrator or root account                                                   | Valid           | Critical |
| Valid credentials for a standard account                                                                 | Valid           | High     |
| Valid credentials for a development, test, or demo environment                                           | Valid           | Medium   |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info     |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown  |

</details>

<details>

<summary>Azure Tenant ID and Access Key</summary>

| Live validation result                                                                                   | Validation type | Risk    |
| -------------------------------------------------------------------------------------------------------- | --------------- | ------- |
| Valid access token                                                                                       | Valid           | High    |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info    |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown |

</details>

<details>

<summary>Base64 Encoded GitHub Fine-Grained Personal Access Token</summary>

| Live validation result                                                                                   | Validation type | Risk    |
| -------------------------------------------------------------------------------------------------------- | --------------- | ------- |
| Valid token with full access                                                                             | Valid           | High    |
| Valid token restricted by SSO, an IP allow-list, or limited permissions                                  | Valid           | Medium  |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info    |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown |

</details>

<details>

<summary>Base64 Encoded GitHub Personal Access Token</summary>

| Live validation result                                                                                   | Validation type | Risk    |
| -------------------------------------------------------------------------------------------------------- | --------------- | ------- |
| Valid token with full access                                                                             | Valid           | High    |
| Valid token restricted by SSO, an IP allow-list, or limited permissions                                  | Valid           | Medium  |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info    |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown |

</details>

<details>

<summary>CircleCI API Token</summary>

| Live validation result                                                                                   | Validation type | Risk     |
| -------------------------------------------------------------------------------------------------------- | --------------- | -------- |
| Valid token for an administrator or root account                                                         | Valid           | Critical |
| Valid token for a standard account                                                                       | Valid           | High     |
| Valid token for a test, development, or QA account, or an account without projects                       | Valid           | Low      |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info     |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown  |

</details>

<details>

<summary>CosmosDB Endpoint Access</summary>

| Live validation result                                                                                   | Validation type | Risk     |
| -------------------------------------------------------------------------------------------------------- | --------------- | -------- |
| Valid access to an administrator or root resource                                                        | Valid           | Critical |
| Valid access to a standard resource                                                                      | Valid           | High     |
| Valid access to a development, test, or demo resource                                                    | Valid           | Medium   |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info     |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown  |

</details>

<details>

<summary>Credentials in Web URL</summary>

| Live validation result                                                                                   | Validation type | Risk    |
| -------------------------------------------------------------------------------------------------------- | --------------- | ------- |
| Credentials return a successful `2xx` JSON response or a `3xx` redirect                                  | Valid           | Medium  |
| Credentials return a successful `2xx` non-JSON response with lower confidence                            | Valid           | Low     |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info    |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown |

</details>

<details>

<summary>Databricks API token</summary>

| Live validation result                                                                                   | Validation type | Risk    |
| -------------------------------------------------------------------------------------------------------- | --------------- | ------- |
| Valid token                                                                                              | Valid           | High    |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info    |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown |

</details>

<details>

<summary>Datadog Access Token</summary>

| Live validation result                                                                                   | Validation type | Risk    |
| -------------------------------------------------------------------------------------------------------- | --------------- | ------- |
| Valid token                                                                                              | Valid           | High    |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info    |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown |

</details>

<details>

<summary>Flutterwave Encryption Key</summary>

| Live validation result                                                                                   | Validation type | Risk     |
| -------------------------------------------------------------------------------------------------------- | --------------- | -------- |
| Valid key with access to live data                                                                       | Valid           | Critical |
| Valid key that returns no data                                                                           | Valid           | High     |
| Valid key for an environment without subscriptions                                                       | Valid           | Low      |
| Valid test key                                                                                           | Valid           | Info     |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info     |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown  |

</details>

<details>

<summary>Flutterwave Secret Key</summary>

| Live validation result                                                                                   | Validation type | Risk     |
| -------------------------------------------------------------------------------------------------------- | --------------- | -------- |
| Valid key with access to live data                                                                       | Valid           | Critical |
| Valid key that returns no data                                                                           | Valid           | High     |
| Valid key for an environment without subscriptions                                                       | Valid           | Low      |
| Valid test key                                                                                           | Valid           | Info     |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info     |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown  |

</details>

<details>

<summary>GCP Access Token</summary>

| Live validation result                                                                                   | Validation type | Risk     |
| -------------------------------------------------------------------------------------------------------- | --------------- | -------- |
| Valid token with `admin` or `full_control` scope                                                         | Valid           | Critical |
| Valid token without `admin` or `full_control` scope                                                      | Valid           | High     |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info     |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown  |

</details>

<details>

<summary>GCP API key</summary>

| Live validation result                                                                                   | Validation type | Risk    |
| -------------------------------------------------------------------------------------------------------- | --------------- | ------- |
| Valid key with Gemini access                                                                             | Valid           | High    |
| Valid key without Gemini access                                                                          | Valid           | Low     |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info    |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown |

</details>

<details>

<summary>GitHub App Token</summary>

| Live validation result                                                                                   | Validation type | Risk    |
| -------------------------------------------------------------------------------------------------------- | --------------- | ------- |
| Valid token with full access                                                                             | Valid           | High    |
| Valid token restricted by SSO, an IP allow-list, or limited permissions                                  | Valid           | Medium  |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info    |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown |

</details>

<details>

<summary>GitHub Fine-Grained Personal Access Token</summary>

| Live validation result                                                                                   | Validation type | Risk    |
| -------------------------------------------------------------------------------------------------------- | --------------- | ------- |
| Valid token with full access                                                                             | Valid           | High    |
| Valid token with restricted access                                                                       | Valid           | Medium  |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info    |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown |

</details>

<details>

<summary>GitHub OAuth Access Token</summary>

| Live validation result                                                                                   | Validation type | Risk    |
| -------------------------------------------------------------------------------------------------------- | --------------- | ------- |
| Valid token with full access                                                                             | Valid           | High    |
| Valid token with restricted access                                                                       | Valid           | Medium  |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info    |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown |

</details>

<details>

<summary>GitHub Personal Access Token</summary>

| Live validation result                                                                                   | Validation type | Risk    |
| -------------------------------------------------------------------------------------------------------- | --------------- | ------- |
| Valid token with full access                                                                             | Valid           | High    |
| Valid token with restricted access                                                                       | Valid           | Medium  |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info    |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown |

</details>

<details>

<summary>GitHub Refresh Token</summary>

| Live validation result                                                                                   | Validation type | Risk    |
| -------------------------------------------------------------------------------------------------------- | --------------- | ------- |
| Valid token with full access                                                                             | Valid           | High    |
| Valid token with restricted access                                                                       | Valid           | Medium  |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info    |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown |

</details>

<details>

<summary>JFrog Artifactory</summary>

| Live validation result                                                                                   | Validation type | Risk     |
| -------------------------------------------------------------------------------------------------------- | --------------- | -------- |
| Valid token                                                                                              | Valid           | Critical |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info     |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown  |

</details>

<details>

<summary>JSON Web Token</summary>

| Live validation result                                                                                   | Validation type | Risk           |
| -------------------------------------------------------------------------------------------------------- | --------------- | -------------- |
| Token verified by its claims and signature                                                               | Valid           | High or Medium |
| Token matches test-data patterns                                                                         | Valid           | Info           |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info           |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown        |

</details>

<details>

<summary>Mailgun private API token</summary>

| Live validation result                                                                                   | Validation type | Risk    |
| -------------------------------------------------------------------------------------------------------- | --------------- | ------- |
| Valid key                                                                                                | Valid           | Medium  |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info    |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown |

</details>

<details>

<summary>New Relic API Key</summary>

| Live validation result                                                                                   | Validation type | Risk    |
| -------------------------------------------------------------------------------------------------------- | --------------- | ------- |
| Valid key with access to live applications                                                               | Valid           | High    |
| Valid key with no applications found                                                                     | Valid           | Low     |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info    |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown |

</details>

<details>

<summary>Npm Access Token</summary>

| Live validation result                                                                                   | Validation type | Risk    |
| -------------------------------------------------------------------------------------------------------- | --------------- | ------- |
| Valid token with package access                                                                          | Valid           | High    |
| Valid token for a demo or test user, an account without packages, or an IP-restricted account            | Valid           | Low     |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info    |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown |

</details>

<details>

<summary>OpenAI API Key</summary>

| Live validation result                                                                                   | Validation type | Risk    |
| -------------------------------------------------------------------------------------------------------- | --------------- | ------- |
| Valid key                                                                                                | Valid           | High    |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info    |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown |

</details>

<details>

<summary>Private Key</summary>

| Live validation result                                                                                   | Validation type | Risk    |
| -------------------------------------------------------------------------------------------------------- | --------------- | ------- |
| Passwordless private key or key with a successfully brute-forced passphrase                              | Valid           | High    |
| Passphrase-protected or encrypted private key                                                            | Valid           | Medium  |
| Certificate                                                                                              | Valid           | Low     |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info    |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown |

</details>

<details>

<summary>SendGrid API token</summary>

| Live validation result                                                                                   | Validation type | Risk    |
| -------------------------------------------------------------------------------------------------------- | --------------- | ------- |
| Valid token                                                                                              | Valid           | Medium  |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info    |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown |

</details>

<details>

<summary>Slack Bot token</summary>

| Live validation result                                                                                   | Validation type | Risk    |
| -------------------------------------------------------------------------------------------------------- | --------------- | ------- |
| Valid token                                                                                              | Valid           | Low     |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info    |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown |

</details>

<details>

<summary>Stripe API Token</summary>

| Live validation result                                                                                   | Validation type | Risk     |
| -------------------------------------------------------------------------------------------------------- | --------------- | -------- |
| Valid token with access to live data                                                                     | Valid           | Critical |
| Valid token that returns no data                                                                         | Valid           | High     |
| Valid token with access to test data only                                                                | Valid           | Info     |
| Secret is invalid or has insufficient permissions (`401` or `403`)                                       | Invalid         | Info     |
| Validation cannot complete because the service is unreachable, rate-limited, or returns a `5xx` response | None            | Unknown  |

</details>

### Excluded secrets and paths

False positive hardcoded secrets tend to be identified in many forked repositories, known test paths and file names.

Arnica includes pre-defined excluded paths and file names that are skipped in the detection and issue creation process. These files and paths can be configured or deleted in the [policies page](https://app.arnica.io/#/admin/policy-v2) under the secrets configurations section.

## Detection scope and scan timing

Arnica identifies hardcoded secrets through:

* **Real-time push scanning** for newly introduced commits on monitored branches.
* **Scheduled scans** for broader repository coverage and status reconciliation.

{% hint style="info" %}
Secrets that exist only in local, unpushed branches are not visible to Arnica until pushed to the integrated SCM.
{% endhint %}

## Troubleshooting common outcomes

### Secret was committed but does not appear

If a leaked secret is not visible:

1. Confirm the commit was pushed to a repository and branch covered by the integration.
2. Confirm the file path is not excluded in **Secrets Policy Settings**.
3. Confirm enough time has passed for the relevant scan cycle (real-time push event or routine scan).

### Secret was fixed but finding still appears open

Finding status is reconciled after a subsequent scan observes the updated file state.

1. Verify the remediation is committed to the relevant monitored branch.
2. Wait for the next routine scan if no new push event occurs.
3. Re-check the finding after the next processing cycle.

### Large historical false-positive backlog

For bulk cleanup (for example, generated archives or crawled content), keep ignore rules in place to prevent new noise and dismiss existing findings in bulk using the API.

{% hint style="info" %}
Use the Arnica API reference for bulk finding workflows: [Arnica API Swagger](https://api.app.arnica.io/swagger).
{% endhint %}
