redact-secret · Report
API credentials (polar_pat_, polar_at_, polar_rt_, polar_cs_, polar_crt_)
One of seven role prefixes + exactly 43 [A-Za-z0-9_-], the union of the pre-2025-01-02 URL-safe era and the alphanumeric-plus-checksum era.
Research record
Format revisions
- Revision 1
polar:api-credential@1current · draft, not reviewed · superseded by @2 · the family's current revision - Revision 2
polar:api-credential@2proposed · draft, not reviewed · supersedes @1
8 events in the review history: 2 authored, 5 observed, 1 reviewed. Latest: authored on 2026-10-05 by automation, project maintainer. Project-maintained review is not independent validation. The family record at this release.
Format
What it looks like
- Descriptive pattern
^polar_(?:pat|at_u|at_o|rt_u|rt_o|cs|crt)_[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-29polarsource/polar server/polar/kit/crypto.py (6a4f2f6): before 2025-01-02 prefix + secrets.token_urlsafe() (43 unpadded URL-safe Base64), since then 37 alphanumerics + a 6-character base62 CRC32; the prefix constants in personal_access_token/service.py and oauth2/constants.py; re-checked 2026-09-29: polar_pat_, polar_at_u_, polar_at_o_, polar_rt_u_, polar_rt_o_, polar_cs_ or polar_crt_ + exactly 43 [A-Za-z0-9_-] (the union of both eras)
- polarsource/polar @ 6a4f2f6d6083ef503cd23cb7f432ab2c60515973: server/polar/kit/crypto.pyprovider-documentation · last read 2026-10-03 · latest outcome unchanged · supports polar_pat_, polar_at_u_, polar_at_o_, polar_rt_u_, polar_rt_o_, polar_cs_ or polar_crt_ + exactly 43 [A-Za-z0-9_-] (the union of both eras) · #L11-L32
Provider documented ·
field-prefix· current · observed 2026-09-29prefix: polar_pat_, polar_at_u_, polar_at_o_, polar_rt_u_, polar_rt_o_, polar_cs_ or polar_crt_
- polarsource/polar @ 6a4f2f6d6083ef503cd23cb7f432ab2c60515973: server/polar/personal_access_token/service.pyprovider-sdk-source · last read 2026-10-03 · latest outcome unchanged · supports polar_pat_
- polarsource/polar @ 6a4f2f6d6083ef503cd23cb7f432ab2c60515973: server/polar/oauth2/constants.pyprovider-sdk-source · last read 2026-10-03 · latest outcome unchanged · supports OAuth prefixes · #L5-L16
Provider documented ·
field-alphabet· current · observed 2026-09-29alphabet: [A-Za-z0-9_-]: era-1 URL-safe Base64, era-2 alphanumerics (Positives include era-1 bodies with - and _ and era-2 alphanumeric bodies.)
- github.com/polarsource/polar/commit/80fae7fc98provider-sdk-source · last read 2026-10-03 · latest outcome unchanged · supports the 2025-01-02 switch
- polarsource/polar @ 6a4f2f6d6083ef503cd23cb7f432ab2c60515973: server/polar/kit/crypto.pyprovider-documentation · last read 2026-10-03 · latest outcome unchanged · supports alphabet: [A-Za-z0-9_-]: era-1 URL-safe Base64, era-2 alphanumerics · #L11-L32
- github.com/redact-secret/redact-secret/issues/860issue-or-discussion · last read 2026-09-29 · latest outcome read · supports R9 · #issuecomment-5880547337
Provider documented ·
field-body-length· current · observed 2026-09-29body-length: exactly 43 characters after the prefix
- polarsource/polar @ 6a4f2f6d6083ef503cd23cb7f432ab2c60515973: server/polar/kit/crypto.pyprovider-documentation · last read 2026-10-03 · latest outcome unchanged · supports era 2: 37 + 6; era 1: token_urlsafe() of 32 bytes, 43 unpadded · #L11-L32
Unresolved ·
field-boundary· current · observed 2026-09-29boundary: a token glued to an identifier on either side ([A-Za-z0-9_-]) is not claimed (Handoff boundary decision, not a provider statement.)
- redact-secret/redact-secret @ 4f220ea000b58fa2e0e431ad88dea4eccb393fb0: docs/audits/evidence/1014/polar.mdprovider-documentation · last read 2026-09-29 · latest outcome read · supports implementation notes
Provider documented ·
field-transport· current · observed 2026-09-29transport: POLAR_ACCESS_TOKEN sent as Authorization: Bearer; Polar(access_token=...) and new Polar({ accessToken })
- redact-secret/redact-secret @ 4f220ea000b58fa2e0e431ad88dea4eccb393fb0: docs/audits/evidence/1014/polar.mdprovider-documentation · last read 2026-09-29 · latest outcome read · supports role and blast radius; test axes
Provider documented ·
field-webhook-secret· current · observed 2026-09-29webhook-secret: Polar webhook secrets are whsec_ + 43 from the same generator; stripe-token already reports whsec_ as a Stripe webhook signing secret (Not this family: Polar cannot claim a prefix Stripe owns (misattributed, still redacted). A whsec_ value is authored neither as a positive nor as a control.)
- polarsource/polar @ 6a4f2f6d6083ef503cd23cb7f432ab2c60515973: server/polar/kit/crypto.pyprovider-documentation · last read 2026-10-03 · latest outcome unchanged · supports webhook-secret: Polar webhook secrets are whsec_ + 43 from the same generator; stripe-token already reports whsec_ as a Stripe webhook signing secret · #L11-L32
- redact-secret/redact-secret @ 4f220ea000b58fa2e0e431ad88dea4eccb393fb0: docs/audits/evidence/1014/polar.mdprovider-documentation · last read 2026-09-29 · latest outcome read · supports excluded shapes
Provider documented ·
field-public-and-short-lived-siblings· current · observed 2026-09-29public-and-short-lived-siblings: polar_ci_ is a public OAuth client id (Q5); polar_c_/polar_cl_ checkout client secrets are handed to the browser; session, authorization-code and verification tokens are short-lived (polar_ci_ and polar_c_ values are benign controls; the short-lived credential prefixes are authored neither way (a later extension may claim them).)
- polarsource/polar @ 6a4f2f6d6083ef503cd23cb7f432ab2c60515973: server/polar/oauth2/constants.pyprovider-sdk-source · last read 2026-10-03 · latest outcome unchanged · supports public-and-short-lived-siblings: polar_ci_ is a public OAuth client id (Q5); polar_c_/polar_cl_ checkout client secrets are handed to the browser; session, authorization-code and verification tokens are short-lived · #L5-L16
- redact-secret/redact-secret @ 4f220ea000b58fa2e0e431ad88dea4eccb393fb0: docs/audits/evidence/1014/README.mdprovider-documentation · last read 2026-09-29 · latest outcome read · supports Q5 · #ruling-questions-for-the-maintainer
- redact-secret/redact-secret @ 4f220ea000b58fa2e0e431ad88dea4eccb393fb0: docs/audits/evidence/1014/polar.mdprovider-documentation · last read 2026-09-29 · latest outcome read · supports excluded shapes
Tool corroborated ·
field-peer-lag· current · observed 2026-09-29peer-lag: no Polar rule in trufflehog 3.97.4 or gitleaks 8.30.1: both lag on every positive. betterleaks (unpinned, not measured here) uses polar_(oat|pat|at)_[A-Za-z0-9_-]{20,100}, which is wider on length and misses polar_rt_, polar_cs_ and polar_crt_
- gitleaks/gitleaks @ v8.30.1: config/gitleaks.tomlscanner-rule-source · last read 2026-10-04 · latest outcome read · supports no polar rule
- redact-secret/redact-secret @ 4f220ea000b58fa2e0e431ad88dea4eccb393fb0: docs/audits/evidence/1014/polar.mdprovider-documentation · last read 2026-09-29 · latest outcome read · supports tier rationale: betterleaks is looser and not used
- trufflesecurity/trufflehog @ v3.97.4: pkg/detectorsscanner-rule-source · last read 2026-09-29 · latest outcome read · supports no polar detector directory at the pinned version
Unresolved ·
listed-references· current · observed 2026-09-29The legacy contract lists 15 references without stating which property each supports.
- github.com/polarsource/polar/commit/4639cb7efdprovider-sdk-source · last read 2026-10-03 · latest outcome unchanged · supports Listed as a reference by the legacy contract
- github.com/polarsource/polar/commit/80fae7fc98provider-sdk-source · last read 2026-10-03 · latest outcome unchanged · supports Listed as a reference by the legacy contract
- polarsource/polar @ 6a4f2f6d6083ef503cd23cb7f432ab2c60515973: server/polar/kit/crypto.pyprovider-documentation · last read 2026-10-03 · latest outcome unchanged · supports Listed as a reference by the legacy contract · #L11-L32
- polarsource/polar @ 6a4f2f6d6083ef503cd23cb7f432ab2c60515973: server/polar/personal_access_token/service.pyprovider-sdk-source · last read 2026-10-03 · latest outcome unchanged · supports Listed as a reference by the legacy contract
- polarsource/polar @ 6a4f2f6d6083ef503cd23cb7f432ab2c60515973: server/polar/organization_access_token/service.pyprovider-sdk-source · last read 2026-10-03 · latest outcome unchanged · supports Listed as a reference by the legacy contract · #L42
- polarsource/polar @ 6a4f2f6d6083ef503cd23cb7f432ab2c60515973: server/polar/oauth2/constants.pyprovider-sdk-source · last read 2026-10-03 · latest outcome unchanged · supports Listed as a reference by the legacy contract · #L5-L16
- redact-secret/redact-secret @ 4f220ea000b58fa2e0e431ad88dea4eccb393fb0: docs/audits/evidence/1014/README.mdprovider-documentation · last read 2026-09-29 · latest outcome read · supports Listed as a reference by the legacy contract · #ruling-questions-for-the-maintainer
- redact-secret/redact-secret @ 4f220ea000b58fa2e0e431ad88dea4eccb393fb0: docs/audits/evidence/1014/README.mdprovider-documentation · last read 2026-09-29 · latest outcome read · supports Listed as a reference by the legacy contract
- github.com/redact-secret/redact-secret/issues/1014issue-or-discussion · last read 2026-09-29 · latest outcome read · supports Listed as a reference by the legacy contract · #issuecomment-5900447820
- github.com/redact-secret/redact-secret/issues/1014issue-or-discussion · last read 2026-09-29 · latest outcome read · supports Listed as a reference by the legacy contract
- redact-secret/redact-secret @ 4f220ea000b58fa2e0e431ad88dea4eccb393fb0: docs/audits/evidence/1014/polar.mdprovider-documentation · last read 2026-09-29 · latest outcome read · supports Listed as a reference by the legacy contract
- github.com/redact-secret/redact-secret/issues/860issue-or-discussion · last read 2026-09-29 · latest outcome read · supports Listed as a reference by the legacy contract · #issuecomment-5852413851
- github.com/redact-secret/redact-secret/issues/860issue-or-discussion · last read 2026-09-29 · latest outcome read · supports Listed as a reference by the legacy contract · #issuecomment-5880547337
- github.com/redact-secret/redact-secret-benchmarks/issues/528issue-or-discussion · last read 2026-09-29 · latest outcome read · supports Listed as a reference by the legacy contract
- github.com/redact-secret/redact-secret/issues/1020issue-or-discussion · last read 2026-09-29 · latest outcome read · supports Listed as a reference by the legacy contract
Provider documented ·
dossier-research· current · observed 2026-09-29Legacy dossier research (verdict ready, tier T1) cited 3 sources; the dossier does not attribute sources to individual properties.
- polarsource/polar @ 6a4f2f6d6083ef503cd23cb7f432ab2c60515973: server/polar/kit/crypto.pyprovider-documentation · last read 2026-10-03 · latest outcome unchanged · supports Cited by the legacy dossier research for this family · #L11-L32
- polarsource/polar @ 6a4f2f6d6083ef503cd23cb7f432ab2c60515973: server/polar/oauth2/constants.pyprovider-sdk-source · last read 2026-10-03 · latest outcome unchanged · supports Cited by the legacy dossier research for this family · #L5-L16
- redact-secret/redact-secret @ 378581770a87751d72e27529796c4f790649fd00: docs/audits/evidence/1014/polar.mdproject-research-note · last read 2026-09-29 · latest outcome read · supports Final research evidence recorded by the legacy dossier
Provider documented ·
taxonomy-sources· current · observed 2026-09-29The legacy taxonomy lists 2 sources for this family. The taxonomy records no date; the dossier researchedAt is used as the observed-at date.
- polarsource/polar @ 6a4f2f6d6083ef503cd23cb7f432ab2c60515973: server/polar/oauth2/constants.pyprovider-sdk-source · last read 2026-10-03 · latest outcome unchanged · supports Listed as a source for this family in the legacy taxonomy · #L5-L16
- redact-secret/redact-secret @ 4f220ea000b58fa2e0e431ad88dea4eccb393fb0: docs/audits/evidence/1014/polar.mdprovider-documentation · last read 2026-09-29 · latest outcome read · supports Listed as a source for this family in the legacy taxonomy
Open questions
No open question is recorded for this revision.
Benchmark dossier notes
- Shape
- one of seven role prefixes + exactly 43
[A-Za-z0-9_-], the union of the URL-safe era (before 2025-01-02) and the alphanumeric-plus-checksum era. - Basis
- T1 under R1 and R9 from the provider server code and its commit history. No checksum applies: an era-1 body is all-alphanumeric about a quarter of the time.
- Issuance
- not attempted; the grammar is T1 from provider sources, so no key is needed.
- Contract in core
- detector-families.md (row on
main; the Beta.12 detector, redact-secret#1020, merged in redact-secret#1039 and is unreleased).
In this benchmark
- Fixtures
- 28
- Left readable
- 0
- Redacted too much
- 0
- False alarms
- 0
28 fixtures: 12 expect a redaction, 16 must stay quiet. See every row
| Evidence level | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| T1Provider-documented | 14 | 0 | 0 | 0 |
| T3Project policy | 8 | 0 | 0 | 0 |
| T0Pending review | 6 | 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 | 28 | 11 | 1 | 0 |
| gitleaksRepository scanner · 8.30.1 · Directory scan · default rulesNo rule maps to it | 28 | 4 | 0 | 0 |
| redact-secretProduct measured here · 0.1.0-beta.14 · Published npm package · default detectors1 detector mapped | 28 | 0 | 0 | 0 |
| trufflehogRepository scanner · 3.97.4 · Filesystem scan · verification disabledNo rule maps to it | 28 | 12 | 0 | 0 |
Looks like it, but isn't
- Collisions
polar_at_without theu_/o_sub-type is not a prefix; checkoutpolar_c_/polar_cl_secrets are handed to the browser.
Scanner rules for this family
No peer rule maps to this family
None of the reviewed peer scanners has a rule that can match a credential of this family.
None mapped
Fixtures in this family
| Fixture | Kind and evidence | redact-secret |
|---|---|---|
polar-api-credential-bare-prosepolar · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
polar-api-credential-bearer-headerpolar · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
polar-api-credential-chat-pastepolar · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
polar-api-credential-client-secret-envpolar · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
polar-api-credential-dotenvpolar · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
polar-api-credential-exportpolar · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
polar-api-credential-json-api-keypolar · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
polar-api-credential-json-tokenpolar · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
polar-api-credential-oauth-refresh-jsonpolar · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
polar-api-credential-python-sdkpolar · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
polar-api-credential-sdk-kwargpolar · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
polar-api-credential-x-api-key-headerpolar · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
polar-api-credential-access-token-without-subtype-twinpolar · prefix-near-miss | Must not flagT3 · Project policy · twin | Quiet |
polar-api-credential-actions-secret-referencepolar · templated-reference | Must not flagT3 · Project policy | Quiet |
polar-api-credential-body-42-twinpolar · unsettled-evidence-input | Pending reviewT0 · Pending · twin | Unscored |
polar-api-credential-body-44-twinpolar · unsettled-evidence-input | Pending reviewT0 · Pending · twin | Unscored |
polar-api-credential-checkout-link-secret-public-idpolar · unsettled-evidence-input | Pending reviewT0 · Pending | Unscored |
polar-api-credential-client-id-in-url-public-idpolar · unsettled-evidence-input | Pending reviewT0 · Pending | Unscored |
polar-api-credential-dot-in-body-twinpolar · wrong-alphabet | Must not flagT3 · Project policy · twin | Quiet |
polar-api-credential-ellipsis-placeholderpolar · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
polar-api-credential-env-reference-referencepolar · templated-reference | Must not flagT3 · Project policy | Quiet |
polar-api-credential-leading-glue-twinpolar · unsettled-evidence-input | Pending reviewT0 · Pending · twin | Unscored |
polar-api-credential-role-guidance-prosepolar · prose-mention | Must not flagT3 · Project policy | Quiet |
polar-api-credential-setting-names-public-idpolar · unsettled-evidence-input | Pending reviewT0 · Pending | Unscored |
polar-api-credential-truncated-near-misspolar · format-near-miss | Must not flagT3 · Project policy | Quiet |
polar-api-credential-unknown-role-twinpolar · prefix-near-miss | Must not flagT1 · Provider-documented · twin | Quiet |
polar-api-credential-uppercase-prefix-twinpolar · prefix-near-miss | Must not flagT1 · Provider-documented · twin | Quiet |
polar-api-credential-x-run-placeholderpolar · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
Sources
Documentation and code
- github.com/polarsource/polar/blob/6a4f2f6d6083ef503cd23cb7f432ab2c60515973/server/polar/oauth2/constants.py#L5-L16
- github.com/redact-secret/redact-secret/blob/4f220ea000b58fa2e0e431ad88dea4eccb393fb0/docs/audits/evidence/1014/polar.md
- github.com/polarsource/polar/blob/6a4f2f6d6083ef503cd23cb7f432ab2c60515973/server/polar/kit/crypto.py#L11-L32
Research log
- redact-secret/redact-secret#1014Research issue
- redact-secret/redact-secret#1020Research issue
- redact-secret/redact-secret#1039Research issue
- redact-secret/redact-secret-benchmarks#528Research issue
- Final evidence, pinned to a commit/redact-secret/redact-secret/blob/378581770a87751d72e27529796c4f790649fd00/docs/audits/evidence/1014/polar.md