Hosted dashboard
The library does everything locally and for free. The hosted platform at getdpdp.net is optional - it's the evidence vault and dashboard: a durable, third-party-attested record you can show an auditor.
Gate the proof, not the function. The SDK always works standalone; the platform adds proof you can't self-fabricate, never a runtime dependency on our uptime.
What it adds
When your library pushes its audit chain to the platform, the backend:
- Verifies the hash-chain with the same hashing the library uses.
- Server-timestamps it on receipt (independent "existed at this time").
- Counter-signs the Certificate of Erasure with a
getdpdp.netkey.
The counter-signature is the product - it turns "JSON your company wrote" into "proof a third party attests to."
Push evidence from your app
The Python SDK can push its chain to the vault in one line — evidence only, never PII, and fire-and-forget so it never blocks your request path:
from dpdpstack import EvidenceClient
vault = EvidenceClient("https://getdpdp.net/api/v1", api_key="dpdp_sk_…", source="api")
vault.push_background(log) # idempotent; returns immediatelySee Security & operations for how the vault stays tamper-proof (append-only enforcement, Row-Level Security) and how to verify or crypto-shred it.
The dashboard
Sign up to get an API key and a dashboard over your evidence - audit log, consent records, retention, data-rights (DSR), breaches, erasure targets, and certificates.

The audit log is the hash-chained record of every decision; the header shows whether the chain still verifies.

Issue and verify a Certificate of Erasure for any subject directly from the dashboard - or verify one publicly at getdpdp.net/verify.

The HTTP API
Everything in the dashboard is also an API — language-agnostic, so you're not limited
to the Python engine: call it from Go, Java, Ruby, or anything that speaks HTTP.
Authenticate with a secret key (dpdp_sk_…) via the X-API-Key header. Prefer a typed
client? The JavaScript SDK wraps every endpoint; for other languages,
see Other languages.
# Record an erasure (or legal-hold deferral) for a subject
curl -X POST https://getdpdp.net/api/v1/erasure \
-H "X-API-Key: dpdp_sk_…" -H "Content-Type: application/json" \
-d '{"principal_ref": "user_42", "purpose": "kyc"}'
# Issue a counter-signed Certificate of Erasure
curl -X POST https://getdpdp.net/api/v1/certificate \
-H "X-API-Key: dpdp_sk_…" -H "Content-Type: application/json" \
-d '{"principal_ref": "user_42", "purpose": "kyc"}'The verify endpoint is public - no auth - so anyone can check a certificate:
curl -X POST https://getdpdp.net/api/v1/certificate/verify \
-H "Content-Type: application/json" \
-d '{"certificate_jwt": "eyJhbGciOiJSUzI1NiIs…"}'This page shows the highlights. For every endpoint — consent, erasure, audit, certificates, rights, breaches, readiness — see the full API reference. The exhaustive, always-current schema is auto-generated at Swagger and ReDoc (it can't drift from the code).
Key types
| Kind | Prefix | Use |
|---|---|---|
| Secret | dpdp_sk_ | Server-side, full access. Never expose in a browser. |
| Publishable | dpdp_pk_ | Safe for client code; limited to the consent-widget endpoints and optionally origin-restricted. |
Manage keys (create, mask, revoke) from the dashboard's API keys page.