Provenance
Tamper-evident lifecycle event chains. Provenance records create an immutable history of asset transformations, enabling full transparency and accountability across supply chains.
Methods​
| Method (TypeScript) | Method (Python) | Description | HTTP |
|---|---|---|---|
record(assetId, event) | record(asset_id, event) | Record lifecycle event | POST /provenance/{assetId}/record |
get(eventId) | get(event_id) | Retrieve single event | GET /provenance/events/{id} |
getChain(assetId) | get_chain(asset_id) | Get complete event chain | GET /provenance/{assetId}/chain |
list(assetId, options?) | list(asset_id, options=None) | List events with pagination | GET /provenance/{assetId}/events |
verifyChain(assetId) | verify_chain(asset_id) | Verify chain integrity | GET /provenance/{assetId}/verify |
Example​
- TypeScript
- Python
import { OptropicClient } from 'optropic';
const client = new OptropicClient({ apiKey: 'optr_live_...' });
// Record a provenance event
const event = await client.provenance.record(
'asset-123',
{
type: 'manufacture',
actor: 'Factory-A',
timestamp: new Date().toISOString(),
data: {
location: 'Shanghai, CN',
batch: 'BATCH-2024-001'
}
}
);
// Retrieve the complete chain
const chain = await client.provenance.getChain('asset-123');
console.log(`Chain length: ${chain.events.length}`);
from optropic import Optropic
client = Optropic(api_key="optr_live_...")
# Record a provenance event
event = client.provenance.record(
'asset-123',
{
'type': 'manufacture',
'actor': 'Factory-A',
'timestamp': '2024-03-29T10:00:00Z',
'data': {
'location': 'Shanghai, CN',
'batch': 'BATCH-2024-001'
}
}
)
# Retrieve the complete chain
chain = client.provenance.get_chain('asset-123')
print(f"Chain length: {len(chain['events'])}")