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.3.tar.gz (15.1 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.3-py3-none-any.whl (14.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: uverify_sdk-0.1.3.tar.gz
  • Upload date:
  • Size: 15.1 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.3.tar.gz
Algorithm Hash digest
SHA256 60c36bd94f111850debbf269d93fbedf583d09112a27e658121a751153636209
MD5 f74508423bcf8ad3f9b607a95cfd4504
BLAKE2b-256 27ba0ee44bd737a5984249b719aa06c740b6e8ab348429872fcf4d2932645413

See more details on using hashes here.

Provenance

The following attestation bundles were made for uverify_sdk-0.1.3.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.3-py3-none-any.whl.

File metadata

  • Download URL: uverify_sdk-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 14.7 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 216ecb5a417598ab9c1bbc9eb5f09a22303a4f4aa249e1b267b4c79a617994ea
MD5 bd92894436d04b26141927ae3512dc29
BLAKE2b-256 a8dc9ec95cd12307b15eb2213dd7e8a0673386df1bc0c5c80286830de23bbf94

See more details on using hashes here.

Provenance

The following attestation bundles were made for uverify_sdk-0.1.3-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