Entries
A blacklist entry blocks a specific value at a given JSONPath, optionally with an expiry.string
required
JSONPath matched against the decision payload (e.g.
$.device.ip, $.customer.id). An entry matches one
stored value against one resolved value, so the path must resolve to a scalar: array- or object-typed paths
reject with 422, as do pci-pan- and pci-sad-scoped paths — an entry persists the raw value, and card
blacklisting rides $.credential_fingerprint instead. Entries carry no schema binding; the check is
conservative across every schema registered on your instance.string
required
The exact value to block.
integer
Time-to-live. Omit for a permanent entry.
admin:blacklist:read / admin:blacklist:write):
For card-fingerprint entries, Specter stores a masked-PAN
display_hint (e.g. ****1234) alongside the opaque
fingerprint so operators can identify the card without exposing it.
Data classification and retention
Blacklist entries are a fraud-prevention record: they are exempt from the decision-record retention windows and persist indefinitely by design.ttl_seconds stays optional and merchant-set, and no sweeper
runs over the table. An expired entry stops matching but its value remains in the table — a TTL does
not bound retention; deleting the entry is the only erasure.
Entry values are readable in clear on the Admin API and UI, including values classified as personal
data — the operator who owns the blacklist must be able to inspect what is blocked and, on a data
subject’s request, find and delete their entries, which a redacted or hashed value would prevent. Every
read of a value classified as personal data is recorded as an audit event.
To make those entries findable, every row carries a classification field on its API representation:
string
required
The
x-data-classification that field_path resolves to across the registered schemas: any or
pii. A path no schema declares is any — an omitted marker is a positive assertion, and an entry on
such a path is inert anyway, since undeclared keys never enter a decision payload.pci-pan or pci-sad is refused with 422 naming the
path — never-store data cannot enter the blacklist by write, and cannot be created in place by
re-declaration either.
Blacklist rules
Ablacklist rule in a ruleset blocks any decision whose payload contains a matching value, and can
auto-populate the blacklist when a configured event arrives:
array
JSONPath fields checked against the blacklist on each decision. Each may carry a filter pipe chain
(
$.customer.email | downcase()), and the same scalar and scope gates as entries apply.integer
TTL applied to auto-populated entries. Omit for permanent.
array
Event types that trigger auto-population:
fraud_report, chargeback, failed. Defaults to ["fraud_report"].Related
Lifecycle events
The events that drive blacklist auto-population.