Official Python SDK for the Optropic Trust API
Project description
optropic
Official Python SDK for Optropic product authentication.
Features
- Simple Authentication - Single API key for all operations
- Type-Safe - Full type annotations with
py.typedsupport - 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 assetVerificationEvidence- 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file optropic-2.2.0.tar.gz.
File metadata
- Download URL: optropic-2.2.0.tar.gz
- Upload date:
- Size: 30.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
16a934dc39736c592736b1d98b756588de6ee1bcc6d4cb28c9717b38bf85a9ca
|
|
| MD5 |
fe741b084be05b086a26c3923de5c034
|
|
| BLAKE2b-256 |
65a206205c8b6aa73e59559f7a4683cab313e65ae4fefa268dae565de3233e8f
|
File details
Details for the file optropic-2.2.0-py3-none-any.whl.
File metadata
- Download URL: optropic-2.2.0-py3-none-any.whl
- Upload date:
- Size: 24.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bba2f0bc5c546f22e1f6e64fb2934eb326f6ed948f2dc218b16b098dd25e5ebc
|
|
| MD5 |
e9e4a70408d116de7da431322a6af80c
|
|
| BLAKE2b-256 |
889fc3bb960ad3891261b377e370a8e3e393032cb6901a728a342d04d9811535
|