redact-secret · Report
API key
32-character API key.
Research record
2 events in the review history: 1 observed, 1 reviewed. Latest: observed on 2026-09-23 by automation, project maintainer. Project-maintained review is not independent validation. The family record at this release.
Format
What it looks like
Shape not recorded.
Format facts
Provider documented ·
provider-source· current · observed 2026-09-23OpenAPI v1 ApiKey.key minLength/maxLength 32 and apiKeyAuth scheme: Datadog's own API reference spec (docs.datadoghq.com /resources/json/full_spec_v1.json, v1 ApiKey schema, generated from DataDog/documentation hugo/data/api/v1/full_spec.yaml) fixes the API key value at exactly 32 characters (minLength 32, maxLength 32) and names the DD-API-KEY header and DD_API_KEY environment variable. The constraint is stated on the v1 key model; the v2 schema states no length. The lowercase-hex alphabet is not provider-stated: the spec's example fits it, and it is corroborated by Datadog-owned code and tools only
- docs.datadoghq.com/resources/json/full_spec_v1.jsonprovider-documentation · last read 2026-09-24 · latest outcome read · supports Datadog's own API reference spec (docs.datadoghq.com /resources/json/full_spec_v1.json, v1 ApiKey schema, generated from DataDog/documentation hugo/data/api/v1/full_spec.yaml) fixes the API key value at exactly 32 characters (minLength 32, maxLength 32) and names the DD-API-KEY header and DD_API_KEY environment variable. The constraint is stated on the v1 key model; the v2 schema states no length. The lowercase-hex alphabet is not provider-stated: the spec's example fits it, and it is corroborated by Datadog-owned code and tools only
Unresolved ·
tool-corroboration· current · observed 2026-09-23Pinned scanner rules are consistent with the contract grammar (1 artifact: trufflehog 3.97.4).
- trufflesecurity/trufflehog @ v3.97.4: pkg/detectors/datadogapikey/datadogapikey.goscanner-rule-source · last read 2026-09-23 · latest outcome read · supports trufflehog 3.97.4: datadogapikey/datadogapikey
Unresolved ·
listed-references· current · observed 2026-09-23The legacy contract lists 1 reference without stating which property each supports.
- DataDog/documentation @ 2fa3c70e353a887edbbf57fe45aedbd3efd4419d: hugo/data/api/v1/full_spec.yamlother · last read 2026-09-23 · latest outcome read · supports Listed as a reference by the legacy contract · #L571-L577
Provider documented ·
dossier-research· current · observed 2026-09-23Legacy dossier research (verdict ready, tier T1) cited 2 sources; the dossier does not attribute sources to individual properties.
- docs.datadoghq.com/resources/json/full_spec_v1.jsonprovider-documentation · last read 2026-09-24 · latest outcome read · supports Cited by the legacy dossier research for this family
- redact-secret/redact-secret @ 8b6a5fde52ecb4dfce13f09c7a947062d21483c7: docs/audits/evidence/644/README.mdproject-research-note · last read 2026-09-23 · latest outcome read · supports Final research evidence recorded by the legacy dossier
Open questions
No open question is recorded for this revision.
Benchmark dossier notes
- Shape
- exactly 32 characters, no prefix, no delimiter, no checksum. Lowercase hex in every observed value.
- Basis
- T1 for length:
ApiKey.keyin the v1 spec hasminLengthandmaxLength32, andsecuritySchemes.apiKeyAuthnamesDD-API-KEYandDD_API_KEY(fetched 2026-09-23). The v2 schema states no length. The alphabet is tool- and Datadog-code-corroborated only; Datadog's own validators disagree on uppercaseA-F. - Issuance
- not attempted. An empirical check of one fresh key (length 32, any uppercase, any fixed leading text) is specified in the #644 web-search pass.
- Contract in core
- detector-families.md (row
datadog:api-key); evidence #644 record.
In this benchmark
- Fixtures
- 36
- Left readable
- 0
- Redacted too much
- 0
- False alarms
- 0
36 fixtures: 19 must stay quiet, 17 record project policy. See every row
| Evidence level | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| T2Tool-corroborated | 15 | 0 | 0 | 0 |
| T3Project policy | 21 | 0 | 0 | 0 |
Every scanner on the same fixtures
In run order. Counts are what each scanner recorded on this family's fixtures, whichever rules it has; a scanner with no rule for the family has nothing to report on it.
| Scanner | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| flare-redactRuntime library · 1.6.1 · Published npm package · secrets-only (pii, generic_assignment disabled) · JavaScript engineNo rule maps to it | 36 | 17 | 0 | 0 |
| gitleaksRepository scanner · 8.30.1 · Directory scan · default rulesNo rule maps to it | 36 | 1 | 0 | 1 |
| redact-secretProduct measured here · 0.1.0-beta.14 · Published npm package · default detectors1 detector mapped | 36 | 0 | 0 | 0 |
| trufflehogRepository scanner · 3.97.4 · Filesystem scan · verification disabled2 rules target it | 36 | 11 | 0 | 0 |
Benchmark dossier questions
- Open caveat
- Length 32 and the DD-API-KEY / DD_API_KEY markers are T1; the lowercase-hex alphabet is tool- and provider-code-corroborated only.
Looks like it, but isn't
- Collisions
- a bare 32-hex run is common (MD5 digests, UUIDs without dashes), so the value needs marker context.
Scanner rules for this family
| Scanner | Rule | What the rule matches |
|---|---|---|
| trufflehog · rules 3.97.4 | datadogapikey | datadog keyword + 32 characters |
| trufflehog · rules 3.97.4 | datadogtoken | datadog or dd keyword + 32 or 40 characters |
No rule maps to this family in flare-redact, gitleaks, openredaction.
Fixtures in this family
| Fixture | Kind and evidence | redact-secret |
|---|---|---|
datadog-api-key-actions-envdatadog · documented-format-literal | Project policyT3 · Project policy | Redacted |
datadog-api-key-api-key-listing-public-iddatadog · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
datadog-api-key-bomdatadog · multibyte-text-offsets | Project policyT3 · Project policy | Redacted |
datadog-api-key-datadog-ci-inlinedatadog · documented-format-literal | Project policyT3 · Project policy | Redacted |
datadog-api-key-dd-api-key-headerdatadog · documented-format-literal | Project policyT3 · Project policy | Redacted |
datadog-api-key-docker-run-agentdatadog · documented-format-literal | Project policyT3 · Project policy | Redacted |
datadog-api-key-env-marker-baredatadog · documented-format-literal | Project policyT3 · Project policy | Redacted |
datadog-api-key-env-marker-quoteddatadog · documented-format-literal | Project policyT3 · Project policy | Redacted |
datadog-api-key-env-marker-unicode-crlfdatadog · documented-format-literal | Project policyT3 · Project policy | Redacted |
datadog-api-key-export-dd-api-keydatadog · documented-format-literal | Project policyT3 · Project policy | Redacted |
datadog-api-key-jsondatadog · structured-text-value | Project policyT3 · Project policy | Redacted |
datadog-api-key-markdowndatadog · markdown-and-comment-value | Project policyT3 · Project policy | Redacted |
datadog-api-key-no-final-newlinedatadog · value-at-input-edges | Project policyT3 · Project policy | Redacted |
datadog-api-key-pythondatadog · source-code-string-literal | Project policyT3 · Project policy | Redacted |
datadog-api-key-python-environ-defaultdatadog · documented-format-literal | Project policyT3 · Project policy | Redacted |
datadog-api-key-single-quotesdatadog · quoted-value-extent | Project policyT3 · Project policy | Redacted |
datadog-api-key-tomldatadog · structured-text-value | Project policyT3 · Project policy | Redacted |
datadog-api-key-yamldatadog · structured-text-value | Project policyT3 · Project policy | Redacted |
datadog-api-key-agent-note-prosedatadog · prose-mention | Must not flagT3 · Project policy | Quiet |
datadog-api-key-audit-fingerprint-encoded-valuedatadog · benign-encoded-value | Must not flagT2 · Tool-corroborated | Quiet |
datadog-api-key-bom-twindatadog · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
datadog-api-key-env-marker-bare-twindatadog · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
datadog-api-key-env-marker-quoted-twindatadog · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
datadog-api-key-env-marker-unicode-crlf-twindatadog · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
datadog-api-key-json-twindatadog · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
datadog-api-key-label-prosedatadog · benign-lookalike | Must not flagT3 · Project policy | Quiet |
datadog-api-key-markdown-twindatadog · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
datadog-api-key-maskdatadog · benign-lookalike | Must not flagT3 · Project policy | Quiet |
datadog-api-key-missing-markerdatadog · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
datadog-api-key-no-final-newline-twindatadog · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
datadog-api-key-python-twindatadog · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
datadog-api-key-referencedatadog · benign-lookalike | Must not flagT3 · Project policy | Quiet |
datadog-api-key-single-quotes-twindatadog · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
datadog-api-key-toml-twindatadog · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
datadog-api-key-truncated-in-prose-near-missdatadog · format-near-miss | Must not flagT2 · Tool-corroborated | Quiet |
datadog-api-key-yaml-twindatadog · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
Sources
Documentation and code
- docs.datadoghq.com/resources/json/full_spec_v1.json
Research log
- redact-secret/redact-secret#644Research issue
- redact-secret/redact-secret#575Research issue
- Final evidence, pinned to a commit/redact-secret/redact-secret/blob/8b6a5fde52ecb4dfce13f09c7a947062d21483c7/docs/audits/evidence/644/README.md