redact-secret · Report
Inference API key
sk-or-v1- followed by 64 lowercase hexadecimal characters (73 characters), per OpenRouter's secret-format documentation.
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
^sk-or-v1-[0-9a-f]{64}$
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-24OpenRouter guardrails secret-formats page ("OpenRouter API key"): OpenRouter's own secret-formats guardrail describes its API key as sk-or-v1- followed by 64 lowercase hexadecimal characters.
- openrouter.ai/docs/guides/features/guardrails/secret-formatsprovider-documentation · last read 2026-09-24 · latest outcome read · supports OpenRouter's own secret-formats guardrail describes its API key as sk-or-v1- followed by 64 lowercase hexadecimal characters.
Unresolved ·
tool-corroboration· current · observed 2026-09-24Pinned scanner rules are consistent with the contract grammar (1 artifact: trufflehog 3.97.4).
- trufflesecurity/trufflehog @ v3.97.4: pkg/detectors/openrouter/openrouter.goprovider-documentation · last read 2026-09-24 · latest outcome read · supports trufflehog 3.97.4: OpenRouter: \b(sk-or-v1-[0-9a-f]{64})\b (feature-gated in 3.97.4)
Provider documented ·
field-prefix· current · observed 2026-09-24prefix: sk-or-v1-
- openrouter.ai/docs/api/api-reference/api-keys/create-keysprovider-documentation · last read 2026-09-24 · latest outcome read · supports prefix: sk-or-v1-
- openrouter.ai/docs/guides/features/guardrails/secret-formatsprovider-documentation · last read 2026-09-24 · latest outcome read · supports prefix: sk-or-v1-
Provider documented ·
field-body· current · observed 2026-09-24body: 64 lowercase hexadecimal characters (73 characters in total)
- trufflesecurity/trufflehog @ v3.97.4: pkg/detectors/openrouter/openrouter.goprovider-documentation · last read 2026-09-24 · latest outcome read · supports tool: [0-9a-f]{64}
- openrouter.ai/docs/api/api-reference/api-keys/create-keysprovider-documentation · last read 2026-09-24 · latest outcome read · supports create-key response example, hex-shaped
- openrouter.ai/docs/guides/features/guardrails/secret-formatsprovider-documentation · last read 2026-09-24 · latest outcome read · supports a guardrail detection description, not a key-issuance specification
Unresolved ·
field-body-case· current · observed 2026-09-24body-case: Whether OpenRouter accepts uppercase hex (betterleaks matches case-insensitively) (No uppercase-hex twin is authored.)
- betterleaks/betterleaks @ main: config/betterleaks.tomlscanner-rule-source · last read 2026-09-24 · latest outcome read · supports body-case: Whether OpenRouter accepts uppercase hex (betterleaks matches case-insensitively)
Provider documented ·
field-key-hash· current · observed 2026-09-24key-hash: The public key hash (/api/v1/keys/{hash}) is 64 lowercase hex with no prefix; its relation to the key is undocumented
- openrouter.ai/docs/api/api-reference/api-keys/create-keysprovider-documentation · last read 2026-09-24 · latest outcome read · supports key-hash: The public key hash (/api/v1/keys/{hash}) is 64 lowercase hex with no prefix; its relation to the key is undocumented
Unresolved ·
field-management-key· current · observed 2026-09-24management-key: Management keys start with sk-or-mgmt-; body length and alphabet are undocumented (A separate family (openrouter:management-api-key), unsupported and unclaimed.)
- github.com/OpenRouterTeam/terraform-provider-openrouterprovider-documentation · last read 2026-09-29 · latest outcome read · supports management-key: Management keys start with sk-or-mgmt-; body length and alphabet are undocumented
- openrouter.ai/docs/guides/overview/auth/management-api-keysprovider-documentation · last read 2026-09-29 · latest outcome read · supports management-key: Management keys start with sk-or-mgmt-; body length and alphabet are undocumented
Unresolved ·
listed-references· current · observed 2026-09-24The legacy contract lists 3 references without stating which property each supports.
- openrouter.ai/docs/guides/overview/auth/management-api-keysprovider-documentation · last read 2026-09-29 · latest outcome read · supports Listed as a reference by the legacy contract
- openrouter.ai/docs/api/api-reference/api-keys/create-keysprovider-documentation · last read 2026-09-24 · latest outcome read · supports Listed as a reference by the legacy contract
- openrouter.ai/docs/api_reference/authenticationother · last read 2026-09-24 · latest outcome read · supports Listed as a reference by the legacy contract
Provider documented ·
dossier-research· current · observed 2026-09-24Legacy dossier research (verdict ready, tier T1) cited 3 sources; the dossier does not attribute sources to individual properties.
- 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
- openrouter.ai/docs/api/api-reference/api-keys/create-keysprovider-documentation · last read 2026-09-24 · latest outcome read · supports Cited by the legacy dossier research for this family
- openrouter.ai/docs/guides/features/guardrails/secret-formatsprovider-documentation · last read 2026-09-24 · latest outcome read · supports Cited by the legacy dossier research for this family
Provider documented ·
taxonomy-sources· current · observed 2026-09-24The legacy taxonomy lists 2 sources for this family. The taxonomy records no date; the dossier researchedAt is used as the observed-at date.
- openrouter.ai/docs/api/api-reference/api-keys/create-keysprovider-documentation · last read 2026-09-24 · latest outcome read · supports Listed as a source for this family in the legacy taxonomy
- openrouter.ai/docs/guides/features/guardrails/secret-formatsprovider-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
sk-or-v1-followed by 64 lowercase hexadecimal characters (73 in total). OpenRouter's own Secrets guardrail page states this shape, and the create-key API example matches it. OAuth PKCE keys use the same shape per the vendored OpenAPI example. - Basis
- T1, provider documentation (guardrail secret formats, create-keys reference), corroborated by TruffleHog, flare-redact and betterleaks. Betterleaks is case-insensitive; a few rules use looser classes than hex.
- Issuance
- not attempted. Free accounts can create a key; the checklist is in benchmarks#220. No pre-
v1orv2shape was found. - Contract in core
- detector-families.md (frozen in the #726 record; management and uppercase variants are intentional gaps).
In this benchmark
- Fixtures
- 32
- Left readable
- 0
- Redacted too much
- 0
- False alarms
- 0
32 fixtures: 12 expect a redaction, 20 must stay quiet. See every row
| Evidence level | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| T1Provider-documented | 12 | 0 | 0 | 0 |
| T2Tool-corroborated | 12 | 0 | 0 | 0 |
| T3Project policy | 8 | 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 | 32 | 0 | 0 | 0 |
| gitleaksRepository scanner · 8.30.1 · Directory scan · default rulesNo rule maps to it | 32 | 4 | 0 | 1 |
| redact-secretProduct measured here · 0.1.0-beta.14 · Published npm package · default detectors1 detector mapped | 32 | 0 | 0 | 0 |
| trufflehogRepository scanner · 3.97.4 · Filesystem scan · verification disabled1 rule targets it | 32 | 0 | 0 | 0 |
Looks like it, but isn't
- Collisions
- the key
hashreturned by the API is 64 hex characters, the same body without the prefix, so a bare 64-hex string is not a key. Thelabelis a masked form (sk-or-v1-plus a short head and tail). OpenAIsk-and Anthropicsk-ant-keys are different families.sk-or-mgmt-is the sibling below.
Scanner rules for this family
| Scanner | Rule | What the rule matches |
|---|---|---|
| flare-redact · rules 1.6.1 | openrouter_key | sk-or-v1- + 64 hex |
| trufflehog · rules 3.97.4 | openrouter | sk-or-v1- + 64 hex |
No rule maps to this family in gitleaks, openredaction.
Fixtures in this family
| Fixture | Kind and evidence | redact-secret |
|---|---|---|
openrouter-api-key-bearer-long-body-twinopenrouter · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
openrouter-api-key-chat-pasteopenrouter · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
openrouter-api-key-key-shape-bareopenrouter · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
openrouter-api-key-key-shape-quotedopenrouter · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
openrouter-api-key-key-shape-unicode-crlfopenrouter · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
openrouter-api-key-base64-config-encoded-valueopenrouter · benign-encoded-value | Must not flagT2 · Tool-corroborated | Quiet |
openrouter-api-key-bearer-headeropenrouter · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
openrouter-api-key-composeopenrouter · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
openrouter-api-key-compose-half-body-twinopenrouter · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
openrouter-api-key-create-key-responseopenrouter · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
openrouter-api-key-docs-proseopenrouter · prose-mention | Must not flagT3 · Project policy | Quiet |
openrouter-api-key-envopenrouter · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
openrouter-api-key-env-lookup-referenceopenrouter · templated-reference | Must not flagT3 · Project policy | Quiet |
openrouter-api-key-env-short-body-twinopenrouter · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
openrouter-api-key-env-template-placeholderopenrouter · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
openrouter-api-key-exportopenrouter · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
openrouter-api-key-guardrail-marker-placeholderopenrouter · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
openrouter-api-key-key-hash-public-idopenrouter · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
openrouter-api-key-label-proseopenrouter · benign-lookalike | Must not flagT3 · Project policy | Quiet |
openrouter-api-key-maskopenrouter · benign-lookalike | Must not flagT3 · Project policy | Quiet |
openrouter-api-key-masked-label-placeholderopenrouter · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
openrouter-api-key-openai-compatibleopenrouter · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
openrouter-api-key-openai-non-hex-body-twinopenrouter · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
openrouter-api-key-openrouter-sdkopenrouter · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
openrouter-api-key-prefix-check-near-missopenrouter · format-near-miss | Must not flagT2 · Tool-corroborated | Quiet |
openrouter-api-key-prefix-onlyopenrouter · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
openrouter-api-key-printenvopenrouter · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
openrouter-api-key-printenv-glued-twinopenrouter · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
openrouter-api-key-referenceopenrouter · benign-lookalike | Must not flagT3 · Project policy | Quiet |
openrouter-api-key-sdk-wrong-prefix-twinopenrouter · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
openrouter-api-key-short-bodyopenrouter · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
openrouter-api-key-user-and-models-public-idopenrouter · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
Sources
Documentation and code
- openrouter.ai/docs/guides/features/guardrails/secret-formats
- openrouter.ai/docs/api/api-reference/api-keys/create-keys
Research log
- redact-secret/redact-secret-benchmarks#220Research issue
- redact-secret/redact-secret#726Research issue
- redact-secret/redact-secret#727Research issue
- Final evidence, pinned to a commit/redact-secret/redact-secret/blob/8b6a5fde52ecb4dfce13f09c7a947062d21483c7/docs/audits/evidence/726/README.md