redact-secret · Report
Legacy integration token
secret_ prefixed integration token.
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
- Descriptive pattern
^secret_[A-Za-z0-9]{43}$
Parts are shown as recorded. Evidence classes belong to the facts below; no class is assigned to a part.
Format facts
Provider documented ·
provider-source· current · observed 2026-09-232024-09 Public API token prefix migration: the provider documents secret_ as the still-working legacy Public API token prefix and ntn_ as the prefix for newly generated tokens; the 43-character body and alphabet remain tool-corroborated
- developers.notion.com/page/changelogprovider-documentation · last read 2026-09-29 · latest outcome read · supports the provider documents secret_ as the still-working legacy Public API token prefix and ntn_ as the prefix for newly generated tokens; the 43-character body and alphabet remain tool-corroborated
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/notion/notion.goscanner-rule-source · last read 2026-09-23 · latest outcome read · supports trufflehog 3.97.4: notion/notion
Provider documented ·
field-prefix· current · observed 2026-09-23prefix: secret_ (legacy, still valid)
- developers.notion.com/page/changelogprovider-documentation · last read 2026-09-29 · latest outcome read · supports 2024-09: ntn_ replaces secret_ for new tokens; existing secret_ tokens keep working
Unresolved ·
field-body· current · observed 2026-09-23body: 43 characters of [A-Za-z0-9] (Notion says the token is opaque, its format may change, and advises against regex validation.)
- trufflesecurity/trufflehog @ v3.97.4: pkg/detectors/notion/notion.goscanner-rule-source · last read 2026-09-23 · latest outcome read · supports body: 43 characters of [A-Za-z0-9]
Unresolved ·
field-ntn-successor· current · observed 2026-09-23ntn-successor: ntn_ prefix for tokens generated after 2024-09 (A separate family (notion:integration-token); an ntn_ value is a secret, so it is never a benign control here.)
- developers.notion.com/page/changelogprovider-documentation · last read 2026-09-29 · latest outcome read · supports ntn-successor: ntn_ prefix for tokens generated after 2024-09
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.
- developers.notion.com/page/changelogprovider-documentation · last read 2026-09-29 · latest outcome read · supports Cited by the legacy dossier research for this family
- redact-secret/redact-secret @ 8b6a5fde52ecb4dfce13f09c7a947062d21483c7: docs/audits/evidence/642/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
- prefix
secret_followed by 43 letters and digits. The prefix and its continued validity are provider-stated. The 43-character body is tool-only (both pinned scanners agree). - Basis
- T1 for the prefix (changelog entry, re-fetched live 2026-09-23 in the #642 record). Body: T2. The "format may change" statement covers bodies, not the documented prefixes.
- Issuance
- not attempted; new tokens are
ntn_, so a fresh legacy sample cannot be minted. Notion's own MCP server code still sayssecret_marks legacy tokens while its README usesntn_. - Contract in core
- detector-families.md (T1 provider source recorded in the #642 evidence; the grammar was frozen under #300).
In this benchmark
- Fixtures
- 29
- Left readable
- 0
- Redacted too much
- 0
- False alarms
- 0
29 fixtures: 12 expect a redaction, 17 must stay quiet. See every row
| Evidence level | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| T1Provider-documented | 12 | 0 | 0 | 0 |
| T2Tool-corroborated | 13 | 0 | 0 | 0 |
| T3Project policy | 4 | 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 engine1 rule targets it | 29 | 0 | 0 | 0 |
| gitleaksRepository scanner · 8.30.1 · Directory scan · default rulesNo rule maps to it | 29 | 4 | 0 | 0 |
| redact-secretProduct measured here · 0.1.0-beta.14 · Published npm package · default detectors1 detector mapped | 29 | 0 | 0 | 0 |
| trufflehogRepository scanner · 3.97.4 · Filesystem scan · verification disabled1 rule targets it | 29 | 3 | 0 | 0 |
Benchmark dossier questions
- Open caveat
- T1 on the secret_ prefix only; the 43-character alphanumeric body is tool-corroborated and Notion says token formats may change.
Looks like it, but isn't
- Collisions
secret_also appears as the OAuth client secret shape (unverified) and as an unrelated word in many strings; page and database ids (UUIDs or 32-hex) and share-URL ids are public.
Scanner rules for this family
| Scanner | Rule | What the rule matches |
|---|---|---|
| flare-redact · rules 1.6.1 | notion_token | ntn_ + 40-50 or secret_ + 43 characters |
| trufflehog · rules 3.97.4 | notion | secret_ + 43 characters |
No rule maps to this family in gitleaks, openredaction.
Fixtures in this family
| Fixture | Kind and evidence | redact-secret |
|---|---|---|
notion-token-bearer-headernotion · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
notion-token-shape-1-barenotion · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
notion-token-shape-1-quotednotion · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
notion-token-shape-1-unicode-crlfnotion · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
notion-token-bearer-header-separator-twinnotion · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
notion-token-compose-envnotion · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
notion-token-curl-bearernotion · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
notion-token-database-and-page-ids-public-idnotion · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
notion-token-debug-client-lognotion · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
notion-token-env-api-keynotion · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
notion-token-env-api-key-length-twinnotion · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
notion-token-github-actions-envnotion · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
notion-token-label-prosenotion · benign-lookalike | Must not flagT3 · Project policy | Quiet |
notion-token-masknotion · benign-lookalike | Must not flagT3 · Project policy | Quiet |
notion-token-mcp-server-envnotion · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
notion-token-prefix-onlynotion · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
notion-token-referencenotion · benign-lookalike | Must not flagT3 · Project policy | Quiet |
notion-token-sdk-clientnotion · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
notion-token-sdk-client-prefix-case-twinnotion · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
notion-token-shape-1-bare-twinnotion · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
notion-token-shape-1-prefix-bare-twinnotion · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
notion-token-shape-1-prefix-quoted-twinnotion · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
notion-token-shape-1-prefix-unicode-crlf-twinnotion · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
notion-token-shape-1-quoted-twinnotion · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
notion-token-shape-1-unicode-crlf-twinnotion · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
notion-token-shell-export-tokennotion · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
notion-token-short-bodynotion · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
notion-token-snake-case-identifier-near-missnotion · format-near-miss | Must not flagT2 · Tool-corroborated | Quiet |
notion-token-vault-note-prosenotion · prose-mention | Must not flagT3 · Project policy | Quiet |
Sources
Documentation and code
- developers.notion.com/page/changelog
Research log
- redact-secret/redact-secret#642Research issue
- redact-secret/redact-secret#300Research issue
- Final evidence, pinned to a commit/redact-secret/redact-secret/blob/8b6a5fde52ecb4dfce13f09c7a947062d21483c7/docs/audits/evidence/642/README.md