redact-secret · Report
Billing API key (pdl_live_/pdl_sdbx_apikey_)
pdl_(live|sdbx)_apikey_ + 26 [a-z0-9] + _ + 22 [A-Za-z0-9] + _ + 3 [A-Za-z0-9] (69 in all), the provider-published regex; key ids and legacy 50-character keys are not claimed.
Research record
3 events in the review history: 2 observed, 1 reviewed. Latest: observed on 2026-09-29 by automation, project maintainer. Project-maintained review is not independent validation. The family record at this release.
Format
What it looks like
- Descriptive pattern
^pdl_(?:live|sdbx)_apikey_[a-z0-9]{26}_[A-Za-z0-9]{22}_[A-Za-z0-9]{3}$
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-29Paddle docs "API keys" (observed 2026-09-29): "They're 69 characters in length and always contain five underscores. You can use regex to match API keys: ^pdl_(live|sdbx)_apikey_[a-z\d]{26}_[a-zA-Z\d]{22}_[a-zA-Z\d]{3}$"; "API keys are case-sensitive"; keys created before 2025-05-06 are legacy 50-character lowercase alphanumeric strings: pdl_live_apikey_ or pdl_sdbx_apikey_ + 26 [a-z0-9] + _ + 22 [A-Za-z0-9] + _ + 3 [A-Za-z0-9], 69 in all
- developer.paddle.com/api-reference/about/api-keysprovider-documentation · last read 2026-09-29 · latest outcome read · supports pdl_live_apikey_ or pdl_sdbx_apikey_ + 26 [a-z0-9] + _ + 22 [A-Za-z0-9] + _ + 3 [A-Za-z0-9], 69 in all
Provider documented ·
field-prefix· current · observed 2026-09-29prefix: pdl_live_apikey_ or pdl_sdbx_apikey_ (case-sensitive)
- developer.paddle.com/api-reference/about/api-keysprovider-documentation · last read 2026-09-29 · latest outcome read · supports the documented regex; "API keys are case-sensitive"
Provider documented ·
field-id-segment· current · observed 2026-09-29id-segment: exactly 26 [a-z0-9]
- developer.paddle.com/api-reference/about/api-keysprovider-documentation · last read 2026-09-29 · latest outcome read · supports the documented regex
- PaddleHQ/paddle-node-sdk @ 651261beddfc65ba5f861729dca17044cbeffb5f: src/__tests__/mocks/notifications/api-key-created.mock.tsprovider-documentation · last read 2026-09-29 · latest outcome read · supports the apikey_ id layout
Provider documented ·
field-secret-segment· current · observed 2026-09-29secret-segment: _ + exactly 22 [A-Za-z0-9]
- developer.paddle.com/api-reference/about/api-keysprovider-documentation · last read 2026-09-29 · latest outcome read · supports the documented regex
Provider documented ·
field-suffix· current · observed 2026-09-29suffix: _ + exactly 3 [A-Za-z0-9]; 69 in all with five underscores
- developer.paddle.com/api-reference/about/api-keysprovider-documentation · last read 2026-09-29 · latest outcome read · supports "69 characters in length and always contain five underscores"
Provider documented ·
field-key-id· current · observed 2026-09-29key-id: apikey_ + 26 is the key id, returned by the API and in webhook payloads; it is not a secret (A bare key id is a benign control.)
- developer.paddle.com/api-reference/about/api-keysprovider-documentation · last read 2026-09-29 · latest outcome read · supports key-id: apikey_ + 26 is the key id, returned by the API and in webhook payloads; it is not a secret
- PaddleHQ/paddle-node-sdk @ 651261beddfc65ba5f861729dca17044cbeffb5f: src/__tests__/mocks/notifications/api-key-created.mock.tsprovider-documentation · last read 2026-09-29 · latest outcome read · supports key-id: apikey_ + 26 is the key id, returned by the API and in webhook payloads; it is not a secret
- redact-secret/redact-secret @ 4f220ea000b58fa2e0e431ad88dea4eccb393fb0: docs/audits/evidence/1014/README.mdprovider-documentation · last read 2026-09-29 · latest outcome read · supports Q5: Paddle apikey_ ids stay unclaimed · #ruling-questions-for-the-maintainer
Provider documented ·
field-legacy-keys· current · observed 2026-09-29legacy-keys: keys created before 2025-05-06 are 50 lowercase alphanumerics with no prefix and no secret-scanning support (Not this family; a legacy-shaped value is authored only outside a named context, as an encoded-value control.)
- developer.paddle.com/api-reference/about/api-keysprovider-documentation · last read 2026-09-29 · latest outcome read · supports legacy-keys: keys created before 2025-05-06 are 50 lowercase alphanumerics with no prefix and no secret-scanning support
Unresolved ·
field-boundary· current · observed 2026-09-29boundary: a key glued to an identifier on either side ([A-Za-z0-9_-]) is not claimed (Handoff boundary decision; the documented regex is anchored.)
- redact-secret/redact-secret @ 4f220ea000b58fa2e0e431ad88dea4eccb393fb0: docs/audits/evidence/1014/paddle.mdprovider-documentation · last read 2026-09-29 · latest outcome read · supports implementation notes
Provider documented ·
field-transport· current · observed 2026-09-29transport: PADDLE_API_KEY sent as Authorization: Bearer; the Paddle SDK constructor argument
- developer.paddle.com/api-reference/about/api-keysprovider-documentation · last read 2026-09-29 · latest outcome read · supports transport: PADDLE_API_KEY sent as Authorization: Bearer; the Paddle SDK constructor argument
- redact-secret/redact-secret @ 4f220ea000b58fa2e0e431ad88dea4eccb393fb0: docs/audits/evidence/1014/paddle.mdprovider-documentation · last read 2026-09-29 · latest outcome read · supports test axes
Tool corroborated ·
field-peer-lag· current · observed 2026-09-29peer-lag: no Paddle rule in trufflehog 3.97.4 or gitleaks 8.30.1: both lag on every positive. betterleaks (unpinned, not measured here) copies the documented regex
- gitleaks/gitleaks @ v8.30.1: config/gitleaks.tomlscanner-rule-source · last read 2026-10-04 · latest outcome read · supports no paddle rule
- redact-secret/redact-secret @ 4f220ea000b58fa2e0e431ad88dea4eccb393fb0: docs/audits/evidence/1014/paddle.mdprovider-documentation · last read 2026-09-29 · latest outcome read · supports tier rationale
- trufflesecurity/trufflehog @ v3.97.4: pkg/detectorsscanner-rule-source · last read 2026-09-29 · latest outcome read · supports no paddle detector directory at the pinned version
Unresolved ·
listed-references· current · observed 2026-09-29The legacy contract lists 9 references without stating which property each supports.
- developer.paddle.com/api-reference/about/api-keysprovider-documentation · last read 2026-09-29 · latest outcome read · supports Listed as a reference by the legacy contract
- PaddleHQ/paddle-node-sdk @ 651261beddfc65ba5f861729dca17044cbeffb5f: src/__tests__/mocks/notifications/api-key-created.mock.tsprovider-documentation · 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/paddle.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/1033issue-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/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
- 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
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.
- developer.paddle.com/api-reference/about/api-keysprovider-documentation · last read 2026-09-29 · latest outcome read · supports Cited by the legacy dossier research for this family
- PaddleHQ/paddle-node-sdk @ 651261beddfc65ba5f861729dca17044cbeffb5f: src/__tests__/mocks/notifications/api-key-created.mock.tsprovider-documentation · last read 2026-09-29 · latest outcome read · supports Cited by the legacy dossier research for this family
- redact-secret/redact-secret @ 378581770a87751d72e27529796c4f790649fd00: docs/audits/evidence/1014/paddle.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.
- developer.paddle.com/api-reference/about/api-keysprovider-documentation · last read 2026-09-29 · latest outcome read · supports Listed as a source for this family in the legacy taxonomy
- redact-secret/redact-secret @ 4f220ea000b58fa2e0e431ad88dea4eccb393fb0: docs/audits/evidence/1014/paddle.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
pdl_live_apikey_orpdl_sdbx_apikey_+ 26[a-z0-9]+_+ 22[A-Za-z0-9]+_+ 3[A-Za-z0-9](69 in all, five underscores).- Basis
- T1: the provider docs publish the regex and the total length.
- 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#1033, merged in redact-secret#1039 and is unreleased).
In this benchmark
- Fixtures
- 41
- Left readable
- 0
- Redacted too much
- 0
- False alarms
- 0
41 fixtures: 15 expect a redaction, 26 must stay quiet. See every row
| Evidence level | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| T1Provider-documented | 15 | 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 | 41 | 14 | 1 | 0 |
| gitleaksRepository scanner · 8.30.1 · Directory scan · default rulesNo rule maps to it | 41 | 8 | 0 | 0 |
| 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 disabledNo rule maps to it | 41 | 15 | 0 | 0 |
Looks like it, but isn't
- Collisions
- the
apikey_+ 26 key id is a non-secret identifier (Q5); legacy keys are 50 unprefixed[a-z0-9].
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 |
|---|---|---|
paddle-api-key-bare-prosepaddle · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
paddle-api-key-bearer-headerpaddle · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
paddle-api-key-chat-pastepaddle · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
paddle-api-key-dotenvpaddle · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
paddle-api-key-exportpaddle · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
paddle-api-key-json-api-keypaddle · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
paddle-api-key-json-tokenpaddle · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
paddle-api-key-key-shape-barepaddle · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
paddle-api-key-key-shape-quotedpaddle · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
paddle-api-key-key-shape-unicode-crlfpaddle · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
paddle-api-key-node-sdk-constructorpaddle · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
paddle-api-key-python-sdk-clientpaddle · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
paddle-api-key-sandbox-dotenvpaddle · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
paddle-api-key-sdk-kwargpaddle · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
paddle-api-key-x-api-key-headerpaddle · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
paddle-api-key-actions-secret-referencepaddle · templated-reference | Must not flagT3 · Project policy | Quiet |
paddle-api-key-api-list-key-id-public-idpaddle · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
paddle-api-key-docs-regex-placeholderpaddle · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
paddle-api-key-ellipsis-placeholderpaddle · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
paddle-api-key-env-reference-referencepaddle · templated-reference | Must not flagT3 · Project policy | Quiet |
paddle-api-key-hyphen-separator-twinpaddle · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
paddle-api-key-id-25-twinpaddle · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
paddle-api-key-id-27-twinpaddle · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
paddle-api-key-key-guidance-prosepaddle · prose-mention | Must not flagT3 · Project policy | Quiet |
paddle-api-key-label-prosepaddle · benign-lookalike | Must not flagT3 · Project policy | Quiet |
paddle-api-key-leading-glue-twinpaddle · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
paddle-api-key-legacy-shaped-build-id-encoded-valuepaddle · benign-encoded-value | Must not flagT2 · Tool-corroborated | Quiet |
paddle-api-key-maskpaddle · benign-lookalike | Must not flagT3 · Project policy | Quiet |
paddle-api-key-missing-apikey-twinpaddle · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
paddle-api-key-prefix-onlypaddle · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
paddle-api-key-referencepaddle · benign-lookalike | Must not flagT3 · Project policy | Quiet |
paddle-api-key-secret-21-twinpaddle · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
paddle-api-key-secret-23-twinpaddle · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
paddle-api-key-short-bodypaddle · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
paddle-api-key-suffix-2-twinpaddle · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
paddle-api-key-suffix-4-twinpaddle · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
paddle-api-key-test-environment-twinpaddle · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
paddle-api-key-trailing-glue-twinpaddle · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
paddle-api-key-truncated-near-misspaddle · format-near-miss | Must not flagT2 · Tool-corroborated | Quiet |
paddle-api-key-uppercase-in-id-twinpaddle · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
paddle-api-key-webhook-key-id-public-idpaddle · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
Sources
Documentation and code
- developer.paddle.com/api-reference/about/api-keys
- github.com/redact-secret/redact-secret/blob/4f220ea000b58fa2e0e431ad88dea4eccb393fb0/docs/audits/evidence/1014/paddle.md
- github.com/PaddleHQ/paddle-node-sdk/blob/651261beddfc65ba5f861729dca17044cbeffb5f/src/__tests__/mocks/notifications/api-key-created.mock.ts
Research log
- redact-secret/redact-secret#1014Research issue
- redact-secret/redact-secret#1033Research 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/paddle.md