Skip to main content

effaced-stripe

First-party effaced resolver for Stripe — export and erase a data subject's billing PII held in Stripe.

  • Export (Art. 15): customer profile, addresses, and payment-method metadata.
  • Erase (Art. 17): Stripe customer deletion, which Stripe itself implements as a GDPR-aware redaction.
uv add effaced effaced-stripe
from effaced import ResolverRegistry, SubjectRef
from effaced_stripe import StripeResolver

registry = ResolverRegistry()
registry.register(StripeResolver(api_key="rk_live_..."))

# Refs of kind "stripe" are routed to this resolver; the value is the
# Stripe customer id.
ref = SubjectRef(kind="stripe", value="cus_...")

Restricted-key setup

Don't hand the resolver your full secret key. Create a restricted key (Dashboard → Developers → API keys → Create restricted key) with exactly the permissions the resolver uses:

Permission Access Used for
Customers Write retrieve for export, delete for erasure
Payment Methods Read payment-method metadata in exports

Everything else stays None. A key missing one of these surfaces as a non-retryable ResolverError the first time the saga touches Stripe.

What gets exported — and what never is

Exported, when populated: customer email, name, phone, billing and shipping addresses, and per payment method its type, card metadata (brand, last4, exp_month, exp_year), and billing details.

Never exported:

  • Full card numbers. Stripe does not expose PANs over its API, so no export from this resolver can ever contain one — don't let anyone tell you otherwise.
  • metadata dicts. Their contents are defined by your application; the resolver cannot know what they hold. Export those fields through your own data map instead.

Changing the exported field set is behaviour under effaced's widened SemVer: additions are MINOR, removals MAJOR.

Idempotency & error semantics

  • Erasing a customer Stripe no longer knows is success (already_absent=True), never an error — saga retries depend on it.
  • Rate limits (429), connection faults, and Stripe-side errors (5xx) propagate so the saga runner retries with backoff. Bad or under-permissioned keys and malformed requests raise ResolverError and abandon fast. SDK-internal retries are disabled; the saga runner owns retry policy.

Testing

No live calls: pass http_client= (any stripe.HTTPClient) to fake the transport. The package is verified against the shared effaced.testing.ResolverConformanceSuite — subclass it the same way to certify your own resolver.

Not legal advice. effaced provides technical mechanisms for implementing data-subject rights. It does not make you GDPR-compliant and does not constitute legal advice.

Licensed under Apache-2.0.

Metadata

Release files for effaced-stripe 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for effaced-stripe 0.1.0
File Size Uploaded
effaced_stripe-0.1.0.tar.gz 16.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for effaced-stripe 0.1.0
File Interpreter ABI Platform
effaced_stripe-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 28.0 kB

Release files / effaced_stripe-0.1.0.tar.gz

Download URL effaced_stripe-0.1.0.tar.gz
Size 16.0 kB
Tags Source
SHA-256 checksum
How to use checksums
6d9a2c6a89b46d047ac2a911a47f351bbe78fa1453bccffaeb5f0d3eada14214
BLAKE2b-256 checksum
How to use checksums
8dd07f1d436230d1615fff31fbe5fff38b2d19df7d5d78ddfb13c9876f928f0c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 11, 2026.

Transparency log

Release files / effaced_stripe-0.1.0-py3-none-any.whl

Download URL effaced_stripe-0.1.0-py3-none-any.whl
Size 12.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
50708cdd3f24ff5baa6b0232657900fee57d62e69730fd7561a3bed1c89d3cf9
BLAKE2b-256 checksum
How to use checksums
65be5cbb234222e5b6b252c4940c79b4c50f5d37e022a67c9617d000093b951a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.13

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 11, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page