redact-secret · Report
API key
xai- prefixed API key; the 80-character body is documented only by the provider's example and corroborated by tools.
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
^xai-[A-Za-z0-9_-]{80}$
Parts are shown as recorded. Evidence classes belong to the facts below; no class is assigned to a part.
Format facts
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/xai/xai.goprovider-documentation · last read 2026-09-24 · latest outcome read · supports trufflehog 3.97.4: xAI: \b(xai-[0-9a-zA-Z_]{80})\b
Provider documented ·
field-prefix· current · observed 2026-09-24prefix: xai-
- docs.x.ai/developers/quickstartprovider-documentation · last read 2026-09-24 · latest outcome read · supports prefix: xai-
- docs.x.ai/developers/rest-api-reference/management/authprovider-documentation · last read 2026-09-24 · latest outcome read · supports prefix: xai-
Provider documented ·
field-body-length· current · observed 2026-09-24body-length: 80 characters after xai- (Documented by example plus tool corroboration, not a provider-stated grammar; the contract is T2 for that reason.)
- docs.x.ai/developers/rest-api-reference/management/authprovider-documentation · last read 2026-09-24 · latest outcome read · supports one example value in the API-key response schema; the prose states no length
- github.com/BerriAI/litellm/issues/9291provider-documentation · last read 2026-09-24 · latest outcome read · supports community: a masked real key shows an 80-character body
- trufflesecurity/trufflehog @ v3.97.4: pkg/detectors/xai/xai.goprovider-documentation · last read 2026-09-24 · latest outcome read · supports tool: {80}
Provider documented ·
field-body-alphabet· current · observed 2026-09-24body-alphabet: [A-Za-z0-9] in every positive; TruffleHog admits _, betterleaks admits _ and - (The contract pattern admits _ and - so no control asserts silence on them.)
- docs.x.ai/developers/rest-api-reference/management/authprovider-documentation · last read 2026-09-24 · latest outcome read · supports the example body is alphanumeric
- trufflesecurity/trufflehog @ v3.97.4: pkg/detectors/xai/xai.goprovider-documentation · last read 2026-09-24 · latest outcome read · supports body-alphabet: [A-Za-z0-9] in every positive; TruffleHog admits _, betterleaks admits _ and -
Unresolved ·
field-right-boundary· current · observed 2026-09-24right-boundary: Behaviour on an 81st word character: TruffleHog \b rejects, osv-scalibr truncates to 80, Kingfisher anchors exactly
- google/osv-scalibr @ main: veles/secrets/grokxaiapikeyscanner-rule-source · last read 2026-09-24 · latest outcome read · supports right-boundary: Behaviour on an 81st word character: TruffleHog \b rejects, osv-scalibr truncates to 80, Kingfisher anchors exactly
Unresolved ·
field-management-key· current · observed 2026-09-24management-key: Management keys (XAI_MANAGEMENT_KEY) are a separate credential; tools report an xai-token- prefix (Not a member of this family and never used as a benign control of it (a real secret).)
- docs.x.ai/developers/management-api-guidescanner-rule-source · last read 2026-09-24 · latest outcome read · supports provider: separate credential, no format
- google/osv-scalibr @ main: veles/secrets/grokxaiapikeyscanner-rule-source · last read 2026-09-24 · latest outcome read · supports tool: xai-token-[A-Za-z0-9]{80}
Unresolved ·
listed-references· current · observed 2026-09-24The legacy contract lists 3 references without stating which property each supports.
- docs.x.ai/developers/quickstartprovider-documentation · last read 2026-09-24 · latest outcome read · supports Listed as a reference by the legacy contract
- docs.x.ai/developers/rest-api-reference/management/authprovider-documentation · last read 2026-09-24 · latest outcome read · supports Listed as a reference by the legacy contract
- github.com/BerriAI/litellm/issues/9291provider-documentation · last read 2026-09-24 · latest outcome read · supports Listed as a reference by the legacy contract
Unresolved ·
dossier-research· current · observed 2026-09-24Legacy dossier research (verdict ready, tier T2) cited 4 sources; the dossier does not attribute sources to individual properties.
- docs.x.ai/developers/quickstartprovider-documentation · last read 2026-09-24 · latest outcome read · supports Cited by the legacy dossier research for this family
- docs.x.ai/developers/management-api-guidescanner-rule-source · last read 2026-09-24 · latest outcome read · supports Cited by the legacy dossier research for this family
- docs.x.ai/developers/rest-api-reference/management/authprovider-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
Unresolved ·
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.
- docs.x.ai/developers/quickstartprovider-documentation · last read 2026-09-24 · latest outcome read · supports Listed as a source for this family in the legacy taxonomy
- docs.x.ai/developers/rest-api-reference/management/authprovider-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
xai-followed by 80 characters. The provider's API-key response schema shows one example with an 80-character alphanumeric body; the docs never state the length or the alphabet in prose. A third-party masked error (LiteLLM, 2025-03) also shows an 80-character body. The alphabet is contested: TruffleHog admits_, betterleaks admits_and-, the others accept letters and digits only. No real key with_or-was seen. - Basis
- the family tier follows the assessment contract (T2, #208 record: the prefix is provider-documented, the body is not); the prefix alone is T1. Length is provider-example plus tool rules; alphabet is unresolved. The official Python SDK reads
XAI_API_KEYand validates nothing. GitHub lists xAI as a secret-scanning partner (regex not published). - Issuance
- not attempted; a free console account can create a key. Checklist in benchmarks#216.
- Contract in core
- detector-families.md (frozen in the #726 record: 80 characters from the provisional union alphabet).
In this benchmark
- Fixtures
- 41
- Left readable
- 0
- Redacted too much
- 0
- False alarms
- 0
41 fixtures: 19 expect a redaction, 22 must stay quiet. See every row
| Evidence level | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| T2Tool-corroborated | 33 | 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 | 41 | 0 | 2 | 4 |
| gitleaksRepository scanner · 8.30.1 · Directory scan · default rulesNo rule maps to it | 41 | 8 | 0 | 1 |
| redact-secretProduct measured here · 0.1.0-beta.14 · Published npm package · default detectors1 detector mapped | 41 | 0 | 0 | 0 |
| trufflehogRepository scanner · 3.97.4 · Filesystem scan · verification disabled1 rule targets it | 41 | 0 | 0 | 0 |
Benchmark dossier questions
- Open caveat
- T1 on the prefix only; the 80-character length rests on one provider example plus tools and the body alphabet is unresolved (checklist in benchmarks#216).
Looks like it, but isn't
- Collisions
- management keys (
XAI_MANAGEMENT_KEY; tools report anxai-token-prefix, provider docs are silent). Public values next to keys:apiKeyIdandteamIdUUIDs, ACL strings such asapi-key:endpoint:chat,xai-organdxai-sdknames, and the redacted form (xai-...plus four characters). A Groqgsk_value stored underXAI_API_KEYis not an xAI key.
Scanner rules for this family
| Scanner | Rule | What the rule matches |
|---|---|---|
| flare-redact · rules 1.6.1 | xai_key | xai- + 40-120 characters |
| trufflehog · rules 3.97.4 | xai | xai- + 80 characters |
No rule maps to this family in gitleaks, openredaction.
Fixtures in this family
| Fixture | Kind and evidence | redact-secret |
|---|---|---|
xai-api-key-bearer-long-body-twinxai · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
xai-api-key-chat-pastexai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
xai-api-key-curl-chatxai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
xai-api-key-env-short-body-twinxai · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
xai-api-key-http-debugxai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
xai-api-key-key-shape-barexai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
xai-api-key-key-shape-quotedxai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
xai-api-key-key-shape-unicode-crlfxai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
xai-api-key-litellm-half-body-twinxai · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
xai-api-key-openai-compatiblexai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
xai-api-key-openai-dot-body-twinxai · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
xai-api-key-retry-logxai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
xai-api-key-short-body-twinxai · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
xai-api-key-vault-readxai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
xai-api-key-base64-config-encoded-valuexai · benign-encoded-value | Must not flagT2 · Tool-corroborated | Quiet |
xai-api-key-bearer-headerxai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
xai-api-key-docs-prosexai · prose-mention | Must not flagT3 · Project policy | Quiet |
xai-api-key-envxai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
xai-api-key-env-grepxai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
xai-api-key-env-grep-glued-twinxai · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
xai-api-key-env-lookup-referencexai · templated-reference | Must not flagT3 · Project policy | Quiet |
xai-api-key-env-template-placeholderxai · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
xai-api-key-exportxai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
xai-api-key-json-profilexai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
xai-api-key-k8s-secretxai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
xai-api-key-key-metadata-public-idxai · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
xai-api-key-label-prosexai · benign-lookalike | Must not flagT3 · Project policy | Quiet |
xai-api-key-litellm-configxai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
xai-api-key-maskxai · benign-lookalike | Must not flagT3 · Project policy | Quiet |
xai-api-key-masked-error-placeholderxai · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
xai-api-key-packages-and-models-public-idxai · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
xai-api-key-prefix-check-near-missxai · format-near-miss | Must not flagT2 · Tool-corroborated | Quiet |
xai-api-key-prefix-letter-twinxai · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
xai-api-key-prefix-onlyxai · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
xai-api-key-redacted-api-placeholderxai · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
xai-api-key-referencexai · benign-lookalike | Must not flagT3 · Project policy | Quiet |
xai-api-key-short-bodyxai · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
xai-api-key-twin-base-dotenvxai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
xai-api-key-twin-base-tsxai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
xai-api-key-vercel-aixai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
xai-api-key-vercel-underscore-prefix-twinxai · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
Sources
Documentation and code
Research log
- redact-secret/redact-secret-benchmarks#216Research 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