Skip to main content

Reclaim Protocol Python SDK

Generate and verify Reclaim Protocol proofs from Python.

Migrating from reclaim-python-sdk? This package is the successor to reclaim-python-sdk. The old package is no longer maintained — please use this one going forward. For legacy versions (≤ 1.0.3), see the old package on PyPI.

Install

pip install reclaimprotocol-python-sdk

Prerequisites

Get your credentials from the Reclaim Developer Portal:

  • APP_ID
  • APP_SECRET
  • PROVIDER_ID

Quick Start

1. Generate a proof request

import asyncio
from reclaim_python_sdk import ReclaimProofRequest

async def main():
    proof_request = await ReclaimProofRequest.init(
        app_id="YOUR_APP_ID",
        app_secret="YOUR_APP_SECRET",
        provider_id="YOUR_PROVIDER_ID",
    )

    # Set the URL where proofs will be sent
    proof_request.set_app_callback_url("https://your-backend.com/receive-proofs")

    # URL to show as QR code / deep link to the user
    request_url = await proof_request.get_request_url()
    print(request_url)

asyncio.run(main())

Optional configuration

# Add contextual data bound to the proof
proof_request.add_context("0x0", "login for example.com")

# Pre-fill known parameters
proof_request.set_params({"email": "user@example.com"})

# Redirect the user after verification
proof_request.set_redirect_url("https://your-app.com/success")

# Export/import the request (e.g., send to another service)
config = proof_request.to_json_string()
restored = await ReclaimProofRequest.from_json_string(config)

2. Receive and verify proofs

Any web framework works. Here's Flask:

from flask import Flask, request, jsonify
from reclaim_python_sdk import verify_proof, Proof

app = Flask(__name__)

@app.post("/receive-proofs")
async def receive_proofs():
    proof = Proof.from_json(request.json)
    result = await verify_proof(proof, {"providerId": "YOUR_PROVIDER_ID"})

    if not result.is_verified:
        return jsonify({"error": str(result.error)}), 400

    return jsonify({
        "extracted_parameters": result.data[0].extracted_parameters,
    })

verify_proof accepts a single proof OR a list of proofs:

await verify_proof(proof, config)      # single
await verify_proof([p1, p2, p3], config)  # multiple

verify_proof Config Options

1. By provider ID + version (recommended)

Pins verification to a specific provider version. Only providerId is required — providerVersion and allowedTags are optional (pass [] for empty tags):

await verify_proof(proof, {
    "providerId": "YOUR_PROVIDER_ID",
    "providerVersion": "1.0.0",  # optional but recommended
    "allowedTags": ["ai"],        # optional, can be []
})

2. By provider ID only

Fetches the latest expected hashes from the Reclaim backend:

await verify_proof(proof, {"providerId": "YOUR_PROVIDER_ID"})

3. By known hashes (no network calls)

Supply the expected hashes directly — no call to the Reclaim backend:

await verify_proof(proof, {"hashes": ["0x1abc2def3456..."]})

4. Skip content validation

Only checks attestor signatures — does NOT validate the proof content:

await verify_proof(proof, {"dangerouslyDisableContentValidation": True})

Result shape

verify_proof always returns a result with:

Field Description
is_verified True / False
error Exception if failed, None if passed
data List of TrustedData (context + extracted parameters)
public_data Deduplicated public data from proofs

Testing

pip install pytest pytest-asyncio
pytest tests/

Links

Security

Never commit your APP_SECRET or expose it in client-side code.

Metadata

Release files for reclaimprotocol-python-sdk 2.0.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 reclaimprotocol-python-sdk 2.0.1
File Size Uploaded
reclaimprotocol_python_sdk-2.0.1.tar.gz 31.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for reclaimprotocol-python-sdk 2.0.1
File Interpreter ABI Platform
reclaimprotocol_python_sdk-2.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 61.9 kB

Release files / reclaimprotocol_python_sdk-2.0.1.tar.gz

Download URL reclaimprotocol_python_sdk-2.0.1.tar.gz
Size 31.6 kB
Tags Source
SHA-256 checksum
How to use checksums
979de6d0cf9dceabd83540ca4622c1370fb8387f2cf5f8ce68769c7665c21820
BLAKE2b-256 checksum
How to use checksums
abe548dce51be67703fc8d108506ac19e62e35bac95f3e1191c24fa8aec366fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release files / reclaimprotocol_python_sdk-2.0.1-py3-none-any.whl

Download URL reclaimprotocol_python_sdk-2.0.1-py3-none-any.whl
Size 30.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
34b99822eece788b00a3f35d5830b2cac6d8ae013fa70565117410bc4c6cd2ba
BLAKE2b-256 checksum
How to use checksums
3cbc5702480dc311b6b5d975787ded6cc11c0c5a7c12a9e4bd92b7a6659d196f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.2

Release history Release notifications | RSS feed

This release

2.0.1 This release

2 release files

2.0.0

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