redact-secret · Report
Team API key (e2b_)
e2b_ + 40 lowercase hex (20 random bytes); the retired sk_e2b_ user token is a different class.
Research record
3 events in the review history: 2 observed, 1 reviewed. Latest: observed on 2026-09-28 by automation, project maintainer. Project-maintained review is not independent validation. The family record at this release.
Format
What it looks like
- Descriptive pattern
^e2b_[0-9a-f]{40}$
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-28e2b-dev/infra keys: ApiKeyPrefix = "e2b_", keyLength = 20 random bytes, hex.EncodeToString (re-checked 2026-09-28): provider code (ruling R1): e2b_ + exactly 40 lowercase hex (20 random bytes, Go hex encoding), 44 in all, no separator or checksum; the local-dev seed test asserts len(prefix) + 2*20
- e2b-dev/infra @ 132dadd2ef55bbac301528500e8a4538caf4b163: packages/shared/pkg/keys/key.goprovider-documentation · last read 2026-09-28 · latest outcome read · supports provider code (ruling R1): e2b_ + exactly 40 lowercase hex (20 random bytes, Go hex encoding), 44 in all, no separator or checksum; the local-dev seed test asserts len(prefix) + 2*20 · #L15-L74
Provider documented ·
field-prefix· current · observed 2026-09-28prefix: e2b_
- docs.e2b.dev/api-keyprovider-documentation · last read 2026-09-28 · latest outcome read · supports e2b_… placeholders
- e2b-dev/infra @ 132dadd2ef55bbac301528500e8a4538caf4b163: packages/shared/pkg/keys/constants.goprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports ApiKeyPrefix = "e2b_" · #L3
Provider documented ·
field-transport· current · observed 2026-09-28transport: the E2B_API_KEY environment variable, sent as X-API-Key
- docs.e2b.dev/api-keyprovider-documentation · last read 2026-09-28 · latest outcome read · supports transport: the E2B_API_KEY environment variable, sent as X-API-Key
Provider documented ·
field-body· current · observed 2026-09-28body: exactly 40 lowercase hex (20 random bytes); 44 in all
- e2b-dev/infra @ 132dadd2ef55bbac301528500e8a4538caf4b163: packages/shared/pkg/keys/key.goprovider-documentation · last read 2026-09-28 · latest outcome read · supports keyLength = 20, hex.EncodeToString · #L15-L74
- e2b-dev/infra @ 132dadd2ef55bbac301528500e8a4538caf4b163: packages/local-dev/seed-local-database_test.goprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports len(prefix) + 2*20 · #L307
- github.com/redact-secret/redact-secret/issues/860issue-or-discussion · last read 2026-09-29 · latest outcome read · supports R1 · #issuecomment-5852413851
Provider documented ·
field-separators· current · observed 2026-09-28separators: none; no checksum
- e2b-dev/infra @ 132dadd2ef55bbac301528500e8a4538caf4b163: packages/shared/pkg/keys/key.goprovider-documentation · last read 2026-09-28 · latest outcome read · supports separators: none; no checksum · #L15-L74
Provider documented ·
field-uppercase-hex· current · observed 2026-09-28uppercase-hex: the verifier accepts an uppercase-hex body the generator never issues (The contract follows the issued grammar; the uppercase twin records the accepted false negative.)
- redact-secret/redact-secret @ 270faf84dc12f6a4a4cf61fe3ffab7aadc4f7262: docs/audits/evidence/860/e2b.mdprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports excluded shapes
Provider documented ·
field-retired-user-token· current · observed 2026-09-28retired-user-token: sk_e2b_ + 40 hex was the user access token, retired on 2026-08-01 (Another credential class: a prefix twin, never a benign control.)
- docs.e2b.dev/migration/access-token-deprecationprovider-documentation · last read 2026-09-28 · latest outcome read · supports retired-user-token: sk_e2b_ + 40 hex was the user access token, retired on 2026-08-01
Unresolved ·
field-boundary· current · observed 2026-09-28boundary: a key glued to an identifier on either side ([A-Za-z0-9_-]) is not claimed; this keeps e2b_ inside sk_e2b_ unclaimed
- redact-secret/redact-secret @ 270faf84dc12f6a4a4cf61fe3ffab7aadc4f7262: docs/audits/evidence/860/e2b.mdprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports boundary: a key glued to an identifier on either side ([A-Za-z0-9_-]) is not claimed; this keeps e2b_ inside sk_e2b_ unclaimed
Tool corroborated ·
field-peer-lag· current · observed 2026-09-28peer-lag: no rule in trufflehog 3.97.4 or gitleaks 8.30.1
- gitleaks/gitleaks @ v8.30.1: config/gitleaks.tomlscanner-rule-source · last read 2026-10-04 · latest outcome read · supports no e2b rule
- trufflesecurity/trufflehog @ v3.97.4: pkg/detectorsscanner-rule-source · last read 2026-09-29 · latest outcome read · supports no e2b detector directory
Unresolved ·
listed-references· current · observed 2026-09-28The legacy contract lists 12 references without stating which property each supports.
- docs.e2b.dev/migration/access-token-deprecationprovider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- docs.e2b.dev/api-keyprovider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- e2b-dev/infra @ 132dadd2ef55bbac301528500e8a4538caf4b163other · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- e2b-dev/infra @ 132dadd2ef55bbac301528500e8a4538caf4b163: packages/shared/pkg/keys/key.goprovider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract · #L15-L74
- e2b-dev/infra @ 132dadd2ef55bbac301528500e8a4538caf4b163: packages/local-dev/seed-local-database_test.goprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract · #L307
- e2b-dev/infra @ 132dadd2ef55bbac301528500e8a4538caf4b163: packages/shared/pkg/keys/constants.goprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract · #L3
- redact-secret/redact-secret @ 270faf84dc12f6a4a4cf61fe3ffab7aadc4f7262: docs/audits/evidence/860/README.mdproject-research-note · last read 2026-09-28 · 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
- github.com/redact-secret/redact-secret-benchmarks/issues/434issue-or-discussion · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- redact-secret/redact-secret @ 270faf84dc12f6a4a4cf61fe3ffab7aadc4f7262: docs/audits/evidence/860/e2b.mdprovider-sdk-source · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
- github.com/redact-secret/redact-secret/issues/905issue-or-discussion · last read 2026-09-28 · latest outcome read · supports Listed as a reference by the legacy contract
Provider documented ·
dossier-research· current · observed 2026-09-28Legacy dossier research (verdict ready, tier T1) cited 2 sources; the dossier does not attribute sources to individual properties.
- e2b-dev/infra @ 132dadd2ef55bbac301528500e8a4538caf4b163other · last read 2026-09-28 · latest outcome read · supports Cited by the legacy dossier research for this family
- redact-secret/redact-secret @ 8b6a5fde52ecb4dfce13f09c7a947062d21483c7: docs/audits/evidence/860/e2b.mdproject-research-note · last read 2026-09-28 · latest outcome read · supports Final research evidence recorded by the legacy dossier
Provider documented ·
taxonomy-sources· current · observed 2026-09-28The legacy taxonomy lists 2 sources for this family. The taxonomy records no date; the dossier researchedAt is used as the observed-at date.
- docs.e2b.dev/api-keyprovider-documentation · last read 2026-09-28 · latest outcome read · supports Listed as a source for this family in the legacy taxonomy
- redact-secret/redact-secret @ 270faf84dc12f6a4a4cf61fe3ffab7aadc4f7262: docs/audits/evidence/860/e2b.mdprovider-sdk-source · last read 2026-09-28 · 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
e2b_, then exactly 40 lowercase hex characters (44 in total), no separators or checksum. - Basis
- T1 under ruling R1 from
e2b-dev/infra: the key package setsApiKeyPrefix = "e2b_"and generates 20 random bytes hex-encoded, and the legacy SQL generator and a local-dev seed test agree. The prefix andkeyLength = 20were unchanged when re-checked on 2026-09-28. One contradicting third-party connector page (32 length) was traced to an illustrative value. - Issuance
- not attempted; optional structure check on one console-issued key.
- Contract in core
- detector-families.md.
In this benchmark
- Fixtures
- 43
- Left readable
- 0
- Redacted too much
- 0
- False alarms
- 0
43 fixtures: 17 expect a redaction, 26 must stay quiet. See every row
| Evidence level | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| T1Provider-documented | 17 | 0 | 0 | 0 |
| T2Tool-corroborated | 18 | 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 engineNo rule maps to it | 43 | 16 | 1 | 0 |
| gitleaksRepository scanner · 8.30.1 · Directory scan · default rulesNo rule maps to it | 43 | 6 | 0 | 1 |
| redact-secretProduct measured here · 0.1.0-beta.14 · Published npm package · default detectors1 detector mapped | 43 | 0 | 0 | 0 |
| trufflehogRepository scanner · 3.97.4 · Filesystem scan · verification disabledNo rule maps to it | 43 | 17 | 0 | 0 |
Looks like it, but isn't
- Collisions
- the 40-hex body alone is SHA-1 and git-SHA shaped, so the prefix is load-bearing. Package names such as
e2b_code_interpreterfail the exact-40-hex body. An uppercase-hex body is accepted by the server verifier but never issued.
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 |
|---|---|---|
e2b-api-key-bare-prosee2b · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
e2b-api-key-bearer-headere2b · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
e2b-api-key-chat-pastee2b · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
e2b-api-key-compose-enve2b · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
e2b-api-key-curl-x-api-keye2b · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
e2b-api-key-dotenve2b · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
e2b-api-key-exporte2b · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
e2b-api-key-js-sandboxe2b · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
e2b-api-key-json-api-keye2b · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
e2b-api-key-json-tokene2b · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
e2b-api-key-key-shape-baree2b · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
e2b-api-key-key-shape-quotede2b · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
e2b-api-key-key-shape-unicode-crlfe2b · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
e2b-api-key-mcp-enve2b · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
e2b-api-key-python-sandboxe2b · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
e2b-api-key-sdk-kwarge2b · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
e2b-api-key-trailing-glue-twine2b · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
e2b-api-key-x-api-key-headere2b · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
e2b-api-key-actions-secret-referencee2b · templated-reference | Must not flagT3 · Project policy | Quiet |
e2b-api-key-body-39-twine2b · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
e2b-api-key-body-41-twine2b · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
e2b-api-key-ellipsis-placeholdere2b · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
e2b-api-key-env-reference-referencee2b · templated-reference | Must not flagT3 · Project policy | Quiet |
e2b-api-key-g-in-body-twine2b · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
e2b-api-key-git-sha-encoded-valuee2b · benign-encoded-value | Must not flagT2 · Tool-corroborated | Quiet |
e2b-api-key-hyphen-in-body-twine2b · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
e2b-api-key-hyphen-separator-twine2b · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
e2b-api-key-key-guidance-prosee2b · prose-mention | Must not flagT3 · Project policy | Quiet |
e2b-api-key-label-prosee2b · benign-lookalike | Must not flagT3 · Project policy | Quiet |
e2b-api-key-leading-glue-twine2b · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
e2b-api-key-leading-underscore-twine2b · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
e2b-api-key-maske2b · benign-lookalike | Must not flagT3 · Project policy | Quiet |
e2b-api-key-masked-placeholdere2b · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
e2b-api-key-module-names-public-ide2b · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
e2b-api-key-package-import-public-ide2b · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
e2b-api-key-prefix-onlye2b · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
e2b-api-key-referencee2b · benign-lookalike | Must not flagT3 · Project policy | Quiet |
e2b-api-key-retired-user-token-twine2b · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
e2b-api-key-short-bodye2b · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
e2b-api-key-template-digest-encoded-valuee2b · benign-encoded-value | Must not flagT2 · Tool-corroborated | Quiet |
e2b-api-key-truncated-near-misse2b · format-near-miss | Must not flagT2 · Tool-corroborated | Quiet |
e2b-api-key-uppercase-hex-byte-twine2b · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
e2b-api-key-uppercase-prefix-twine2b · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
Sources
Documentation and code
- docs.e2b.dev/api-key
- github.com/redact-secret/redact-secret/blob/270faf84dc12f6a4a4cf61fe3ffab7aadc4f7262/docs/audits/evidence/860/e2b.md
- github.com/e2b-dev/infra/tree/132dadd2ef55bbac301528500e8a4538caf4b163
Research log
- redact-secret/redact-secret#860Research issue
- redact-secret/redact-secret#905Research issue
- redact-secret/redact-secret-benchmarks#434Research issue
- Final evidence, pinned to a commit/redact-secret/redact-secret/blob/8b6a5fde52ecb4dfce13f09c7a947062d21483c7/docs/audits/evidence/860/e2b.md