Skip to main content
The Payment Card Industry Data Security Standard (PCI DSS) is mandatory for any organization that stores, processes, or transmits credit card data. If your AI application handles payment information — even in free-text customer messages — PCI DSS applies. Blindfold’s pci_dss policy automatically detects and protects cardholder data before it reaches AI providers, reducing your PCI scope.

Who Must Comply

PCI DSS applies to:
  • Merchants that accept card payments
  • Service providers that store, process, or transmit cardholder data
  • Any AI application that processes text containing card numbers, CVVs, or expiry dates
If a customer pastes a credit card number into your AI chatbot, your application is processing cardholder data — even if you didn’t ask for it.

Key PCI DSS Requirements

RequirementDescriptionBlindfold Solution
Req 3Protect stored cardholder dataencrypt() with AES-256
Req 3.3Mask PAN when displayedmask() shows only last 4 digits
Req 3.4Render PAN unreadable in storageencrypt() or hash()
Req 7Restrict access to cardholder dataSeparate API keys per application
Req 10Track and monitor all accessAudit logs for every operation
Req 12Maintain a security policyPolicy-based detection rules

pci_dss Policy

The pci_dss policy detects payment-related sensitive data:
Entity TypeExamples
Credit Card Number4532-7562-9102-3456
Credit Card Expiration12/25, 03/2027
CVV / CVC123, 4567
Credit Card BrandVisa, Mastercard, Amex
Bank Account Number1234567890
IBANDE89 3704 0044 0532 0130 00
PersonCardholder name
Email AddressContact email

Code Examples

Mask Card Numbers for Display (Req 3.3)

PCI DSS requires that PANs are masked when displayed, showing at most the first 6 and last 4 digits:
from blindfold import Blindfold

client = Blindfold(api_key="your-key")

text = "Customer card: 4532-7562-9102-3456, CVV: 789, Exp: 12/25"

masked = client.mask(text, policy="pci_dss")
# → "Customer card: ************3456, CVV: ***, Exp: *****"

print(masked.text)  # Safe to display in UI

Encrypt for Storage (Req 3.4)

Render cardholder data unreadable anywhere it is stored:
# Encrypt card data for database storage
transaction = "Payment from John Doe, card 4532-7562-9102-3456, amount $500"

encrypted = client.encrypt(transaction, encryption_key="your-encryption-key")
# Store encrypted.text in your database — PCI compliant

# Decrypt when authorized access is needed
decrypted = client.decrypt(encrypted.text, encryption_key="your-encryption-key")
print(decrypted.text)  # Original text restored

Redact from Logs (Req 3)

Remove cardholder data from application logs permanently:
log_entry = "2026-02-15 Payment processed: card 4532-7562-9102-3456 for $250.00"

redacted = client.redact(log_entry, policy="pci_dss")
# → "2026-02-15 Payment processed: card [REDACTED] for $250.00"

# Safe to store in log files — no cardholder data

Tokenize for AI Processing

If your AI chatbot might receive card numbers in customer messages:
from openai import OpenAI

openai_client = OpenAI(api_key="your-openai-key")

customer_message = (
    "I was charged twice on my card 4532-7562-9102-3456. "
    "The charges were on 02/10 and 02/11 for $49.99 each."
)

# Tokenize before sending to AI
tokenized = client.tokenize(customer_message, policy="pci_dss")
# → "I was charged twice on my card <Credit Card Number_1>..."

completion = openai_client.chat.completions.create(
    model="gpt-4o-mini",
    messages=[
        {"role": "system", "content": "You are a billing support agent."},
        {"role": "user", "content": tokenized.text},
    ],
)

# Restore card details in response
restored = client.detokenize(
    completion.choices[0].message.content,
    tokenized.mapping,
)
print(restored.text)

Reducing PCI Scope

By tokenizing cardholder data with Blindfold before it reaches your AI provider or logs:
  • AI provider is out of PCI scope — it never sees real card numbers
  • Application logs are out of scope — redacted data has no cardholder data
  • Your PCI audit is simpler — fewer systems in scope

PCI DSS Compliance Checklist

1

Apply the pci_dss policy

Use policy="pci_dss" on all calls that might contain payment data.
2

Mask PANs in UI

Use blindfold.mask() before displaying any text that might contain card numbers.
3

Encrypt cardholder data at rest

Use blindfold.encrypt() before storing any text containing card data.
4

Redact card data from logs

Use blindfold.redact() to strip cardholder data from application logs.
5

Tokenize before AI calls

Use blindfold.tokenize() before sending customer messages to AI providers.
6

Use separate API keys

Issue different Blindfold API keys for different applications to enforce access control.
7

Review audit logs

Regularly export and review audit logs for compliance documentation.