Quickstart
Create your first cryptographic attestation in under 5 minutes.
The Basics
Section titled “The Basics”The simplest working example with online (server-witnessed) mode:
from glacis import Glacis
glacis = Glacis(api_key="glsk_live_...")
receipt = glacis.attest( service_id="my-ai-app", operation_type="inference", input={"prompt": "What is the capital of France?"}, # Hashed locally output={"response": "Paris is the capital of France."}, # Never sent)
print(f"Attestation ID: {receipt.id}") # att_xxx...print(f"Witness status: {receipt.witness_status}") # WITNESSEDStep-by-Step
Section titled “Step-by-Step”-
Install the SDK
Terminal window pip install glacis -
Create an attestation
from glacis import Glacisglacis = Glacis(api_key="glsk_live_your_key_here")# Attest any AI interactionreceipt = glacis.attest(service_id="my-service",operation_type="inference",input={"prompt": "Hello, world!"},output={"response": "Hi there!"},metadata={"model": "gpt-4", "temperature": "0.7"},)print(f"Attestation ID: {receipt.id}")print(f"Evidence hash: {receipt.evidence_hash}") -
Verify the receipt
result = glacis.verify(receipt)print(f"Valid: {result.valid}")if result.verification:print(f"Signature valid: {result.verification.signature_valid}")print(f"Merkle proof valid: {result.verification.proof_valid}") -
Save the receipt for later verification
import jsonwith open("receipt.json", "w") as f:json.dump(receipt.model_dump(), f, indent=2, default=str)# Verify from the command line:# python -m glacis verify receipt.json
What You Get
Section titled “What You Get”Each call to attest() returns an Attestation object with these fields:
| Field | Type | Description |
|---|---|---|
id | str | Unique identifier (att_... for online, oatt_... for offline) |
evidence_hash | str | SHA-256 hash of your input/output (hex-encoded, 64 chars) |
service_id | str | Service identifier you provided |
operation_type | str | Operation type you provided |
witness_status | str (property) | "WITNESSED" (online) or "UNVERIFIED" (offline). Computed property — not included in model_dump() output. |
signature | str | Ed25519 signature (hex-encoded) |
public_key | str | Ed25519 public key (hex-encoded) |
timestamp | int | None | Unix timestamp in milliseconds |
No API Key? Use Offline Mode
Section titled “No API Key? Use Offline Mode”Start developing immediately without an API key. Offline mode signs attestations locally with Ed25519:
from glacis import Glacisimport os
# Offline mode requires a 32-byte signing seedglacis = Glacis(mode="offline", signing_seed=os.urandom(32))
receipt = glacis.attest( service_id="dev-testing", operation_type="inference", input={"prompt": "test"}, output={"response": "result"},)
print(f"Attestation ID: {receipt.id}") # oatt_xxx...print(f"Witness status: {receipt.witness_status}") # UNVERIFIEDVerify an offline receipt:
result = glacis.verify(receipt)print(f"Valid: {result.valid}") # Trueprint(f"Signature valid: {result.signature_valid}") # Trueprint(f"Witness status: {result.witness_status}") # UNVERIFIEDNext Steps
Section titled “Next Steps” Configuration Set up glacis.yaml for controls, sampling, judges, and storage.
OpenAI Integration Auto-attest every OpenAI call with zero code changes.
API Reference Complete SDK reference with all methods and options.
CLI Reference Verify receipts from the command line.