Skip to main content

BurnLedger Python SDK

Python client for the BurnLedger API — cryptographic deletion certificates for regulatory compliance.

Scope

The SDK covers the data plane: systems, attestations, certificates, webhooks, API keys, /v1/me, and the transparency log — everything involved in measuring a datastore and verifying what came back.

Account management (teams, TOTP enrolment, subscriptions, invoices, the audit log, billing) is deliberately not part of the SDK. Those are administrative actions people take once, in the dashboard at https://dashboard.burnledger.io, and they are available on the raw /v1 API for anyone who needs to automate them.

Install

pip install burnledger

Requirements: Python 3.10+

Quick Start

from burnledger import BurnLedger

with BurnLedger(api_key="dp_...") as dp:
    # 1. Attest — snapshot systems before deletion
    att = dp.attest("user@example.com", system_ids=["sys_abc", "sys_def"])

    # 2. Delete data (your code, your tools)

    # 3. Verify — confirm deletion and get certificate
    result = dp.verify(att.id, "user@example.com", timeout=60)

    # 4. Download certificate PDF
    dp.save_pdf(result.certificate.id, "./deletion-cert.pdf")

Async

from burnledger import AsyncBurnLedger

async with AsyncBurnLedger(api_key="dp_...") as dp:
    att = await dp.attest("user@example.com", system_ids=["sys_abc"])
    result = await dp.verify(att.id, "user@example.com", timeout=60)

Offline Verification

Verify certificates without network access using Ed25519 signatures:

from burnledger import verify_certificate, verify_transparency, PublicKeyInfo

key = PublicKeyInfo.from_hex("abcdef...", revoked=False)
keys = {key.key_id: key}

cert_result = verify_certificate(certificate, keys)
# VerificationResult.VALID or raises VerificationError

log_result = verify_transparency(certificate, keys)
# TransparencyResult.INCLUDED or raises VerificationError

Webhook Verification

Verify incoming webhook signatures (HMAC-SHA256):

from burnledger import verify_webhook_signature

valid = verify_webhook_signature(
    secret=webhook_secret,         # from dp.register_webhook()
    body=request.body,             # raw request body
    signature=request.headers["X-BurnLedger-Signature"],
)

API Reference

Client

BurnLedger(
    api_key: str,
    *,
    base_url: str = "https://api.burnledger.io",
    timeout: float = 30.0,
    max_retries: int = 2,
)

Systems

Method Returns
register_system(**opts) System
get_system(id) System
list_systems(limit=25) SyncPaginator[System]
deregister_system(id) None
health_check(id) System

Attestations

Method Returns
attest(subject, **opts) Attestation
batch_attest(subjects, **opts) BatchAttestationResponse
get_attestation(id) Attestation
wait_for(id, **opts) Attestation
verify(id, subject, **opts) VerifyResult

Certificates

Method Returns
get_certificate(id) CertificateResponse
list_certificates(limit=25) SyncPaginator[CertificateResponse]
get_certificate_stats() CertificateStats
export_certificates(**opts) bytes
download_pdf(id) bytes
save_pdf(id, path) None
get_revocation_status(id) RevocationStatus
revoke_certificate(id, reason=...) CertificateResponse
batch_revoke_certificates(ids, reason=...) BatchRevokeResponse

batch_revoke_certificates takes up to MAX_BATCH_REVOKE (100) ids under one reason and returns whether all, some or none were revoked: the failures are in errors, each naming the request index and certificate_id, so a partially failed batch is inspected, not caught. More than 100 ids raises ValueError before any request is made; chunk larger sets by MAX_BATCH_REVOKE.

Webhooks

Method Returns
register_webhook(url=...) Webhook
list_webhooks(limit=25) SyncPaginator[Webhook]
delete_webhook(id) None
rotate_webhook_secret(id) WebhookRotateResponse
commit_webhook_rotation(id) None
list_failed_deliveries(limit=25) SyncPaginator[FailedDelivery]
retry_delivery(delivery_id) None
resolve_delivery(delivery_id) None

API Keys

Method Returns
list_api_keys() list[ApiKeyListItem]
create_api_key(role=..., team_id=None) ApiKeyResponse
revoke_api_key(id) None

Transparency Log

These methods do not require authentication.

Method Returns
get_log_head() SignedTreeHead
get_log_entry(index) LogEntry
get_log_entries(start, end) list[LogEntry]
get_inclusion_proof(index, tree_size) InclusionProof
get_consistency_proof(old_size, new_size) ConsistencyProof

Pagination

All list_* methods return a paginator that auto-fetches pages:

for cert in dp.list_certificates():
    print(cert.id)

# async
async for cert in dp.list_certificates():
    print(cert.id)

License

MIT

Metadata

Release files for burnledger 0.8.1

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

Source distribution (sdist)

Source distribution for burnledger 0.8.1
File Size Uploaded Provenance
burnledger-0.8.1.tar.gz 129.9 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for burnledger 0.8.1
File Interpreter ABI Platform
burnledger-0.8.1-py3-none-any.whl Python 3 none any Details

Total release size: 206.3 kB

Release files / burnledger-0.8.1.tar.gz

Download URL burnledger-0.8.1.tar.gz
Size 129.9 kB
Tags Source
SHA-256 checksum
How to use checksums
4fd850b3575048dc6f1e3f241a82c6a60ea785b7e974899d6d5d2fbca018d0d4
BLAKE2b-256 checksum
How to use checksums
4bfb4d4e6c38341d972e3a28afc448138aa07a7ad1a0b0e298dead7593a20944
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / burnledger-0.8.1-py3-none-any.whl

Download URL burnledger-0.8.1-py3-none-any.whl
Size 76.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0b3003a6428ae55f805e10e859b91240e12d191cd6375fcd90976057f18a82ca
BLAKE2b-256 checksum
How to use checksums
351e524f72786c31a65f214c3345383d67977b66eff641fb7f13288747409a03
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.12.14

Security for burnledger 0.8.1

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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