Skip to main content

Official Python SDK for the Optropic Trust API

Project description

optropic

Official Python SDK for Optropic product authentication.

PyPI version Python License: MIT

Features

  • Simple Authentication - Single API key for all operations
  • Type-Safe - Full type annotations with py.typed support
  • Fast Integration - Copy-paste quickstart, production-ready
  • Vertical Agnostic - Same API for pharma, luxury, art, and more
  • Error Transparency - Clear error codes, actionable messages

Installation

pip install optropic

Quick Start

from optropic import OptropicClient

# Initialize the client
client = OptropicClient(api_key="op_live_xxxxxxxxxxxx")

# Verify an asset
result = client.verify("asset-id-or-short-id")

if result.signature_valid:
    print("Product is genuine!")
    print(f"Security level: {result.security_level}")
else:
    print("Warning: verification failed")

# Or use as a context manager
with OptropicClient(api_key="op_live_xxxxxxxxxxxx") as client:
    result = client.verify("asset-id-or-short-id")
    print(result.status)

API Reference

OptropicClient

The main client class for all SDK operations.

Constructor

client = OptropicClient(
    api_key="op_live_xxx",       # Required: Your API key
    base_url="https://...",      # Optional: For self-hosted deployments
    timeout=30.0,                # Optional: Request timeout in seconds (default: 30)
)

Methods

verify(asset_id: str) -> VerifyResult

Verify an asset by ID or short_id.

result = client.verify("asset-id-or-short-id")

# Result fields
result.id                  # str: Asset ID
result.status              # str: Verification status
result.security_level      # str: 'signed', 'sealed', etc.
result.signature_valid     # bool: Whether signature is valid
result.verification_count  # int: Number of times verified
result.last_verified_at    # str: ISO timestamp of last verification
result.revocation_status   # str: 'active' or 'revoked'
result.verification_mode   # str: 'online' or 'offline'
result.provenance_valid    # Optional[bool]: Provenance chain validity
result.evidence            # Optional[VerificationEvidence]: Detailed evidence

Error Handling

All errors extend OptropicError with clear error codes:

from optropic import (
    OptropicClient,
    OptropicError,
    AuthenticationError,
    NotFoundError,
)

try:
    result = client.verify("asset-id")
except NotFoundError:
    print("Asset not found in system.")
except AuthenticationError:
    print("Invalid API key.")
except OptropicError as e:
    print(f"Error {e.code}: {e}")
    print(f"HTTP status: {e.status}")

Error Types

Error Code Description
AuthenticationError INVALID_API_KEY API key is invalid or missing
NotFoundError NOT_FOUND Asset doesn't exist in the system
OptropicError varies Base error for all other API errors

Types

All types are frozen dataclasses with full type annotations:

from optropic import VerifyResult, VerificationEvidence
  • VerifyResult - Result of verifying an asset
  • VerificationEvidence - Structured evidence from verification

Environment Variables

Recommended setup for production:

# .env
OPTROPIC_API_KEY=op_live_xxxxxxxxxxxx
import os
from optropic import OptropicClient

client = OptropicClient(api_key=os.environ["OPTROPIC_API_KEY"])

Examples

Flask Backend

from flask import Flask, request, jsonify
from optropic import OptropicClient, NotFoundError

app = Flask(__name__)
client = OptropicClient(api_key=os.environ["OPTROPIC_API_KEY"])

@app.route("/api/verify", methods=["POST"])
def verify():
    try:
        result = client.verify(request.json["asset_id"])
        return jsonify({
            "status": result.status,
            "signature_valid": result.signature_valid,
            "security_level": result.security_level,
        })
    except NotFoundError:
        return jsonify({"error": "Asset not found"}), 404

Django View

import os
from django.http import JsonResponse
from optropic import OptropicClient

client = OptropicClient(api_key=os.environ["OPTROPIC_API_KEY"])

def verify_asset(request, asset_id):
    result = client.verify(asset_id)
    return JsonResponse({
        "status": result.status,
        "signature_valid": result.signature_valid,
    })

Support

License

MIT - Virtrex GmbH

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

optropic-2.0.0.tar.gz (17.5 kB view details)

Uploaded Source

Built Distribution

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

optropic-2.0.0-py3-none-any.whl (19.1 kB view details)

Uploaded Python 3

File details

Details for the file optropic-2.0.0.tar.gz.

File metadata

  • Download URL: optropic-2.0.0.tar.gz
  • Upload date:
  • Size: 17.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.1

File hashes

Hashes for optropic-2.0.0.tar.gz
Algorithm Hash digest
SHA256 4edf36d7d8c4cd64adfc45052a305b322a63ca9737470b721661fd0a0c39726a
MD5 abc3223d13369ede393b00abc48b148a
BLAKE2b-256 67e58956e2db53e1798902779281eb286110805ccb0dd24d839442abd508c5a4

See more details on using hashes here.

File details

Details for the file optropic-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: optropic-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 19.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.1

File hashes

Hashes for optropic-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ae55ab86e6a841759bc7825a777542e61bf8a226916dfd6c5da065055d2a7484
MD5 5e0c7304ec98bed5c6b9fa01b1cfb17b
BLAKE2b-256 0fd385c6c73c389446ae81f24fa2fd4d9dcebe64d4f4f18a698fb28095f1543b

See more details on using hashes here.

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