redact-secret · Report
API key (personal access token or service key)
LangSmith API key in its two documented roles, personal access token (lsv2_pt_) and workspace/org service key (lsv2_sk_); the 32+10 lowercase-hex segment grammar is tool-corroborated.
Research record
3 events in the review history: 2 observed, 1 reviewed. Latest: observed on 2026-09-24 by automation, project maintainer. Project-maintained review is not independent validation. The family record at this release.
Format
What it looks like
- Descriptive pattern
^lsv2_(?:pt|sk)_[0-9a-f]{32}_[0-9a-f]{10}$
Parts are shown as recorded. Evidence classes belong to the facts below; no class is assigned to a part.
Format facts
Tool corroborated ·
tool-corroboration· current · observed 2026-09-24Pinned scanner rules are consistent with the contract grammar (3 artifacts: poltergeist; titus (kingfisher.langchain.1/.2); trufflehog 3.97.4).
- ghostsecurity/poltergeist @ main: pkg/rules/langsmith.yamlscanner-rule-source · last read 2026-09-24 · latest outcome read · supports poltergeist: langsmith.yaml
- praetorian-inc/titus @ main: pkg/rule/rules/langchain.ymlscanner-rule-source · last read 2026-09-24 · latest outcome read · supports titus (kingfisher.langchain.1/.2): langchain.yml
- trufflesecurity/trufflehog @ v3.97.4: pkg/detectors/langsmith/langsmith.goscanner-rule-source · last read 2026-09-24 · latest outcome read · supports trufflehog 3.97.4: langsmith/langsmith
Provider documented ·
field-roles· current · observed 2026-09-24roles: Two API-key roles: Personal Access Token (inherits the creating user's permissions) and service key (workspace- or org-scoped). Shown once at creation.
- docs.langchain.com/langsmith/create-account-api-keyprovider-documentation · last read 2026-09-24 · latest outcome read · supports roles: Two API-key roles: Personal Access Token (inherits the creating user's permissions) and service key (workspace- or org-scoped). Shown once at creation.
Provider documented ·
field-contexts· current · observed 2026-09-24contexts: LANGSMITH_API_KEY env (legacy LANGCHAIN_API_KEY), X-API-Key header, OTEL_EXPORTER_OTLP_HEADERS x-api-key=<key>; LANGSMITH_WORKSPACE_ID and LANGSMITH_ENDPOINT are non-secret neighbours.
- docs.langchain.com/langsmith/trace-with-opentelemetryprovider-documentation · last read 2026-09-24 · latest outcome read · supports contexts: LANGSMITH_API_KEY env (legacy LANGCHAIN_API_KEY), X-API-Key header, OTEL_EXPORTER_OTLP_HEADERS x-api-key=<key>; LANGSMITH_WORKSPACE_ID and LANGSMITH_ENDPOINT are non-secret neighbours.
- docs.langchain.com/langsmith/create-account-api-keyprovider-documentation · last read 2026-09-24 · latest outcome read · supports contexts: LANGSMITH_API_KEY env (legacy LANGCHAIN_API_KEY), X-API-Key header, OTEL_EXPORTER_OTLP_HEADERS x-api-key=<key>; LANGSMITH_WORKSPACE_ID and LANGSMITH_ENDPOINT are non-secret neighbours.
Provider documented ·
field-profile-file· current · observed 2026-09-24profile-file: SDK profiles in ~/.langsmith/config.json carry api_key; workspace id goes to X-Tenant-Id and is not itself a credential; the env lookup checks LANGSMITH_ then legacy LANGCHAIN_.
- langchain-ai/langsmith-sdk @ main: python/langsmith/_internal/_profiles.pyprovider-sdk-source · last read 2026-09-24 · latest outcome read · supports profile-file: SDK profiles in ~/.langsmith/config.json carry api_key; workspace id goes to X-Tenant-Id and is not itself a credential; the env lookup checks LANGSMITH_ then legacy LANGCHAIN_.
Tool corroborated ·
field-prefix· current · observed 2026-09-24prefix: lsv2_ followed by a role code pt (PAT) or sk (service key) and _. (The docs render masked lsv2_pt_/lsv2_sk_ displays (seen only indirectly, in a search snippet), which agrees but is not a grammar statement. The SDK redactor also keys on lsv2_(pt|sk)_ (provider code).)
- ghostsecurity/poltergeist @ main: pkg/rules/langsmith.yamlscanner-rule-source · last read 2026-09-24 · latest outcome read · supports prefix: lsv2_ followed by a role code pt (PAT) or sk (service key) and _.
- praetorian-inc/titus @ main: pkg/rule/rules/langchain.ymlscanner-rule-source · last read 2026-09-24 · latest outcome read · supports prefix: lsv2_ followed by a role code pt (PAT) or sk (service key) and _.
- trufflesecurity/trufflehog @ 363923b901c911a9164f50b6c423f47c15372b1c: pkg/detectors/langsmith/langsmith.goscanner-rule-source · last read 2026-09-24 · latest outcome read · supports prefix: lsv2_ followed by a role code pt (PAT) or sk (service key) and _.
Tool corroborated ·
field-segment-widths· current · observed 2026-09-24segment-widths: Exactly 32 characters, then _, then exactly 10 characters (51 total). (The provider SDK redactor accepts 32+ and any number of tails, and its own test fixture uses a 36-character first segment. Pending the hands-on checklist in #219.)
- praetorian-inc/titus @ main: pkg/rule/rules/langchain.ymlscanner-rule-source · last read 2026-09-24 · latest outcome read · supports segment-widths: Exactly 32 characters, then _, then exactly 10 characters (51 total).
- trufflesecurity/trufflehog @ 363923b901c911a9164f50b6c423f47c15372b1c: pkg/detectors/langsmith/langsmith.goscanner-rule-source · last read 2026-09-24 · latest outcome read · supports segment-widths: Exactly 32 characters, then _, then exactly 10 characters (51 total).
Unresolved ·
field-alphabet· current · observed 2026-09-24alphabet: Lowercase hex in both segments. (trufflehog is lowercase-only; Titus and Poltergeist are case-insensitive; the provider redactor is alphanumeric. Uppercase acceptance is not claimed and no uppercase twin is authored.)
- trufflesecurity/trufflehog @ 363923b901c911a9164f50b6c423f47c15372b1c: pkg/detectors/langsmith/langsmith.goscanner-rule-source · last read 2026-09-24 · latest outcome read · supports alphabet: Lowercase hex in both segments.
Unresolved ·
field-tail-semantics· current · observed 2026-09-24tail-semantics: Whether the 10-character tail is a checksum, key-id fragment or random is not documented.
- github.com/redact-secret/redact-secret-benchmarks/issues/219issue-or-discussion · last read 2026-09-24 · latest outcome read · supports tail-semantics: Whether the 10-character tail is a checksum, key-id fragment or random is not documented.
- langchain-ai/helm @ main: charts/langsmith/values.yamlother · last read 2026-09-24 · latest outcome read · supports config.apiKeySalt hints at server-side derivation
Unresolved ·
field-legacy-ls· current · observed 2026-09-24legacy-ls__: A legacy ls__ key form exists (provider SDK still redacts ls__[A-Za-z0-9]{16,}); its real length and alphabet are not established. Not claimed; only the ls__... placeholder appears, as a placeholder control.
- langchain-ai/langsmith-sdk @ main: js/src/anonymizer/index.tsprovider-sdk-source · last read 2026-09-24 · latest outcome read · supports legacy-ls__: A legacy ls__ key form exists (provider SDK still redacts ls__[A-Za-z0-9]{16,}); its real length and alphabet are not established. Not claimed; only the ls__... placeholder appears, as a placeholder control.
Unresolved ·
field-sibling-credentials· current · observed 2026-09-24sibling-credentials: License key, SCIM bearer token, OAuth access/refresh tokens, internal X-Service-Key JWT and deployment keys are distinct LangSmith credentials outside this family. Their shapes are unknown or uncorroborated; none is fixtured as a control (they are secrets).
- api.smith.langchain.com/openapi.jsonprovider-documentation · last read 2026-09-24 · latest outcome read · supports sibling-credentials: License key, SCIM bearer token, OAuth access/refresh tokens, internal X-Service-Key JWT and deployment keys are distinct LangSmith credentials outside this family. Their shapes are unknown or uncorroborated; none is fixtured as a control (they are secrets).
- docs.github.com/en/code-security/secret-scanning/introduction/supported-secret-scanning-patternsprovider-documentation · last read 2026-10-05 · latest outcome read · supports tool listing: PAT, service key, license key and SCIM bearer token are four distinct types
- docs.langchain.com/langsmith/smith-api/scim-tokens/create-a-scim-tokenprovider-documentation · last read 2026-09-24 · latest outcome read · supports SCIM bearer token, shown once; no prefix or example
- forum.langchain.com/t/langgraph-deployment-with-langchain-api-key/226provider-documentation · last read 2026-09-24 · latest outcome read · supports community, uncorroborated sk-*/dep-srv-*
- lab.ctbb.show/writeups/chaining-service-key-leakage-and-path-confusion-in-langsmithprovider-documentation · last read 2026-09-24 · latest outcome read · supports community write-up of the X-Service-Key JWT
Unresolved ·
listed-references· current · observed 2026-09-24The legacy contract lists 4 references without stating which property each supports.
- api.smith.langchain.com/openapi.jsonprovider-documentation · last read 2026-09-24 · latest outcome read · supports Listed as a reference by the legacy contract
- docs.langchain.com/langsmith/create-account-api-keyprovider-documentation · last read 2026-09-24 · latest outcome read · supports Listed as a reference by the legacy contract
- langchain-ai/langsmith-sdk @ main: js/src/anonymizer/index.tsprovider-sdk-source · last read 2026-09-24 · latest outcome read · supports Listed as a reference by the legacy contract
- github.com/redact-secret/redact-secret-benchmarks/issues/219issue-or-discussion · last read 2026-09-24 · latest outcome read · supports Listed as a reference by the legacy contract
Tool corroborated ·
dossier-research· current · observed 2026-09-24Legacy dossier research (verdict ready, tier T2) cited 3 sources; the dossier does not attribute sources to individual properties.
- docs.langchain.com/langsmith/create-account-api-keyprovider-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/726/README.mdproject-research-note · last read 2026-09-27 · latest outcome read · supports Final research evidence recorded by the legacy dossier
- trufflesecurity/trufflehog @ 363923b901c911a9164f50b6c423f47c15372b1c: pkg/detectors/langsmith/langsmith.goscanner-rule-source · last read 2026-09-24 · latest outcome read · supports Cited by the legacy dossier research for this family
Unresolved ·
taxonomy-sources· current · observed 2026-09-24The legacy taxonomy lists 1 source for this family. The taxonomy records no date; the dossier researchedAt is used as the observed-at date.
- docs.langchain.com/langsmith/create-account-api-keyprovider-documentation · last read 2026-09-24 · 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
- prefix
lsv2_pt_(personal access token) orlsv2_sk_(service key), then 32 lowercase hex characters,_, and 10 lowercase hex characters (51 in total). Every scanner agrees on the layout; TruffleHog merges the two roles, other rules split them. The docs render only masked forms of both prefixes. LangChain's own SDK redactor accepts a wider first segment ([A-Za-z0-9]{32,}with any number of_tails). Whether the 10-hex tail is a checksum, a key-id fragment or random is not documented. - Basis
- T2: TruffleHog rule (pinned commit above) plus other scanners; the provider page only documents roles, env vars (
LANGSMITH_API_KEY, legacyLANGCHAIN_API_KEY) and headers (X-API-Key, OTLPx-api-key). - Issuance
- not attempted; the free Developer tier can issue both roles. The checklist is in benchmarks#219.
- Contract in core
- detector-families.md (frozen in the #726 record, implemented under #728).
In this benchmark
- Fixtures
- 42
- Left readable
- 0
- Redacted too much
- 0
- False alarms
- 0
42 fixtures: 18 expect a redaction, 24 must stay quiet. See every row
| Evidence level | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| T2Tool-corroborated | 33 | 0 | 0 | 0 |
| T3Project policy | 9 | 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 | 42 | 18 | 0 | 0 |
| gitleaksRepository scanner · 8.30.1 · Directory scan · default rulesNo rule maps to it | 42 | 7 | 0 | 1 |
| redact-secretProduct measured here · 0.1.0-beta.14 · Published npm package · default detectors1 detector mapped | 42 | 0 | 0 | 0 |
| trufflehogRepository scanner · 3.97.4 · Filesystem scan · verification disabled1 rule targets it | 42 | 0 | 0 | 0 |
Benchmark dossier questions
- Open caveat
- The provider documents roles and contexts but no prefix, length or alphabet; segment widths and lowercase hex are scanner-corroborated only (checklist in benchmarks#219).
Looks like it, but isn't
- Collisions
- siblings that are not this family: legacy
ls__keys (provider code still redacts them; real shape unknown), self-hosted license key, SCIM bearer token, OAuth access and refresh tokens, the internalX-Service-KeyJWT, and unconfirmed deployment keys. Public ids next to keys: workspace and organization UUIDs, project names,short_key, andls_-prefixed trace metadata names such asls_provider.
Scanner rules for this family
| Scanner | Rule | What the rule matches |
|---|---|---|
| trufflehog · rules 3.97.4 | langsmith | lsv2_pt_ or lsv2_sk_ + 32 hex + _ + 10 hex |
No rule maps to this family in flare-redact, gitleaks, openredaction.
Fixtures in this family
| Fixture | Kind and evidence | redact-secret |
|---|---|---|
langsmith-api-key-export-patlangsmith · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
langsmith-api-key-langgraph-clilangsmith · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
langsmith-api-key-op-readlangsmith · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
langsmith-api-key-pat-dotenvlangsmith · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
langsmith-api-key-pat-nested-run-metadatalangsmith · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
langsmith-api-key-pat-otlp-header-listlangsmith · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
langsmith-api-key-pat-profile-jsonlangsmith · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
langsmith-api-key-pat-shape-barelangsmith · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
langsmith-api-key-pat-shape-quotedlangsmith · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
langsmith-api-key-pat-shape-unicode-crlflangsmith · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
langsmith-api-key-runbooklangsmith · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
langsmith-api-key-service-key-legacy-exportlangsmith · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
langsmith-api-key-service-key-python-clientlangsmith · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
langsmith-api-key-service-key-workflow-envlangsmith · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
langsmith-api-key-service-key-x-api-keylangsmith · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
langsmith-api-key-short-tail-twinlangsmith · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
langsmith-api-key-twin-base-cilangsmith · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
langsmith-api-key-twin-base-dotenvlangsmith · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
langsmith-api-key-twin-base-jsonlangsmith · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
langsmith-api-key-env-example-placeholderlangsmith · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
langsmith-api-key-key-roles-doc-proselangsmith · prose-mention | Must not flagT3 · Project policy | Quiet |
langsmith-api-key-label-proselangsmith · benign-lookalike | Must not flagT3 · Project policy | Quiet |
langsmith-api-key-legacy-readme-placeholderlangsmith · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
langsmith-api-key-long-tail-twinlangsmith · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
langsmith-api-key-masklangsmith · benign-lookalike | Must not flagT3 · Project policy | Quiet |
langsmith-api-key-masked-short-key-placeholderlangsmith · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
langsmith-api-key-merged-segments-twinlangsmith · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
langsmith-api-key-missing-tail-near-misslangsmith · format-near-miss | Must not flagT2 · Tool-corroborated | Quiet |
langsmith-api-key-non-hex-body-twinlangsmith · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
langsmith-api-key-non-hex-tail-twinlangsmith · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
langsmith-api-key-prefix-onlylangsmith · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
langsmith-api-key-prefix-only-grep-near-misslangsmith · format-near-miss | Must not flagT2 · Tool-corroborated | Quiet |
langsmith-api-key-python-env-lookup-referencelangsmith · templated-reference | Must not flagT3 · Project policy | Quiet |
langsmith-api-key-referencelangsmith · benign-lookalike | Must not flagT3 · Project policy | Quiet |
langsmith-api-key-requirements-hash-encoded-valuelangsmith · benign-encoded-value | Must not flagT2 · Tool-corroborated | Quiet |
langsmith-api-key-role-code-twinlangsmith · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
langsmith-api-key-short-bodylangsmith · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
langsmith-api-key-short-first-segment-twinlangsmith · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
langsmith-api-key-trace-share-link-public-idlangsmith · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
langsmith-api-key-unknown-role-code-twinlangsmith · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
langsmith-api-key-workflow-secret-ref-referencelangsmith · templated-reference | Must not flagT3 · Project policy | Quiet |
langsmith-api-key-workspace-ids-env-public-idlangsmith · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
Sources
Documentation and code
- docs.langchain.com/langsmith/create-account-api-key
- github.com/trufflesecurity/trufflehog/blob/363923b901c911a9164f50b6c423f47c15372b1c/pkg/detectors/langsmith/langsmith.go
Research log
- redact-secret/redact-secret-benchmarks#219Research issue
- redact-secret/redact-secret#726Research issue
- redact-secret/redact-secret#728Research issue
- Final evidence, pinned to a commit/redact-secret/redact-secret/blob/8b6a5fde52ecb4dfce13f09c7a947062d21483c7/docs/audits/evidence/726/README.md