Skip to main content

Official Python SDK for the UVerify API

Project description

uverify-sdk (Python)

Official Python SDK for the UVerify API.

Requirements

Installation

pip install uverify-sdk

Quick Start

from uverify_sdk import UVerifyClient

client = UVerifyClient()

# Verify a document hash
certificates = client.verify("a3b4c5d6...")
for cert in certificates:
    print(cert.transaction_hash, cert.creation_time)

Usage

Creating the client

from uverify_sdk import UVerifyClient

# Connect to the public API (default)
client = UVerifyClient()

# Connect to a self-hosted instance
client = UVerifyClient(base_url="http://localhost:9090")

# Add custom headers and set a custom timeout
client = UVerifyClient(headers={"X-Custom-Header": "value"}, timeout=60)

# Register default signing callbacks so you don't pass them on every call
client = UVerifyClient(
    sign_message=lambda msg: wallet.sign_data(address, msg),
    sign_tx=lambda tx: wallet.sign_tx(tx),
)

Verify a certificate

# By data hash
certificates = client.verify("sha256-or-sha512-hex-hash")

# By transaction hash + data hash
cert = client.verify_by_transaction("cardano-tx-hash", "data-hash")

Issue certificates

issue_certificates handles the full flow — build, sign, submit — in one call and returns the Cardano transaction hash on success.

metadata can be a plain dict; the SDK serialises it to JSON automatically.

from uverify_sdk.models import CertificateData

tx_hash = client.issue_certificates(
    address="addr1...",
    certificates=[
        CertificateData(
            hash="sha256-hash-of-document",
            algorithm="SHA-256",
            metadata={"issuer": "Acme Corp", "date": "2024-01-01"},
        )
    ],
    sign_tx=lambda tx: wallet.sign_tx(tx),  # omit if set in constructor
)
print("Certified at tx:", tx_hash)

Optionally pass a state_id to issue under a specific state:

tx_hash = client.issue_certificates(
    address="addr1...",
    certificates=[CertificateData(hash="sha256-hash")],
    state_id="my-state-id",
)

User state management

# Retrieve current state
state = client.get_user_info("addr1...")
print("Certificates remaining:", state.countdown if state else None)

# Invalidate a state
client.invalidate_state("addr1...", "state-id")

# Opt out entirely
client.opt_out("addr1...", "state-id")

A per-call signing callback can be passed as the sign_message keyword argument to any of these methods if you didn't register one in the constructor.

Low-level access via .core

For advanced flows (multi-sig, custom submission logic) use the .core attribute to call each step individually:

from uverify_sdk.models import BuildTransactionRequest, CertificateData

# Build
response = client.core.build_transaction(
    BuildTransactionRequest(
        type="default",
        address="addr1...",
        state_id="your-state-id",
        certificates=[CertificateData(hash="sha256-hash", algorithm="SHA-256")],
    )
)

# Sign with your wallet, then submit
witness_set = wallet.sign_tx(response.unsigned_transaction)
tx_hash = client.core.submit_transaction(response.unsigned_transaction, witness_set)
from uverify_sdk.models import UserActionRequest, ExecuteUserActionRequest

# Two-step user state action (manual)
challenge = client.core.request_user_action(
    UserActionRequest(address="addr1...", action="USER_INFO")
)

sig = wallet.sign_data(address, challenge.message)

result = client.core.execute_user_action(
    ExecuteUserActionRequest(
        address=challenge.address,
        action=challenge.action,
        message=challenge.message,
        signature=challenge.signature,
        timestamp=challenge.timestamp,
        user_signature=sig.signature,
        user_public_key=sig.key,
    )
)
print(result.state)

Error Handling

from uverify_sdk import UVerifyApiError, UVerifyValidationError

try:
    tx_hash = client.issue_certificates("addr1...", certs)
except UVerifyApiError as e:
    # HTTP error from the API (status code, response body available)
    print(f"API error {e.status_code}: {e}")
except UVerifyValidationError as e:
    # Missing sign callback — pass one to the method or set it in the constructor
    print(e)

API Reference

High-level helpers

Method Description
verify(hash) Look up all on-chain certificates for a data hash
verify_by_transaction(tx_hash, data_hash) Fetch a specific certificate by tx hash + data hash
issue_certificates(address, certificates, sign_tx?, state_id?) Build, sign, and submit a certificate transaction; returns tx hash
get_user_info(address, sign_message?) Retrieve the current user state
invalidate_state(address, state_id, sign_message?) Mark a state as invalid
opt_out(address, state_id, sign_message?) Remove the user's state entirely

Low-level core (.core)

Method Endpoint
core.build_transaction(request) POST /api/v1/transaction/build
core.submit_transaction(tx, witness_set?) POST /api/v1/transaction/submit
core.request_user_action(request) POST /api/v1/user/request/action
core.execute_user_action(request) POST /api/v1/user/state/action

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

uverify_sdk-0.1.2.tar.gz (15.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

uverify_sdk-0.1.2-py3-none-any.whl (14.4 kB view details)

Uploaded Python 3

File details

Details for the file uverify_sdk-0.1.2.tar.gz.

File metadata

  • Download URL: uverify_sdk-0.1.2.tar.gz
  • Upload date:
  • Size: 15.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for uverify_sdk-0.1.2.tar.gz
Algorithm Hash digest
SHA256 687bae51d7db09b28b5ca4383e1f3bd4072cb5301bb17ceba650d64486476321
MD5 ce771bfcce999388f0de65a9d54a6609
BLAKE2b-256 8e09b25db7e1a068d4378ddc56665c9548f44b93e129a9fb5c87a2181a7f8774

See more details on using hashes here.

Provenance

The following attestation bundles were made for uverify_sdk-0.1.2.tar.gz:

Publisher: publish-python.yml on UVerify-io/uverify-sdks

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file uverify_sdk-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: uverify_sdk-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 14.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for uverify_sdk-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 54ee5ff38d2e3c5ee3e4e6ac27a1ab168fec4acf189e441e5ed736d6cafe2055
MD5 8a534ee1c263532de845d0fc56b2abb1
BLAKE2b-256 317155a9ff23db5ec89e97b411b67544206ecfca02b08ff8910083d7a7c6cec7

See more details on using hashes here.

Provenance

The following attestation bundles were made for uverify_sdk-0.1.2-py3-none-any.whl:

Publisher: publish-python.yml on UVerify-io/uverify-sdks

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page