Concepts
The core of Treza is the pipeline: a graph of nodes that turns inputs into generated media. Everything else, from the visual editor to the published API, is built around it. Start with the concepts below, then move on to the advanced and enterprise building blocks further down the page.
Pipelines
What they are
A pipeline is a directed graph of nodes that you build on the visual canvas. Data flows along the edges from one node to the next: an input becomes a prompt, a prompt becomes a video, a video gets a caption. A pipeline has a draft you edit and, once you publish, a versioned published snapshot that serves API traffic.
Core ideas
Draft vs. published. You edit the draft freely. Publishing takes a snapshot and assigns it a version number. API calls always run the published snapshot, never your in-progress draft.
Contract. Treza derives an input/output contract from your input and output nodes. The input keys you send to the API, and the output keys you get back, come from this contract.
Ownership. Pipelines and API keys are scoped to your account. A key can only invoke pipelines owned by the same account.
Typical flow
Start from a prompt or a template on the canvas.
Wire nodes together and run the pipeline to test it.
Publish to get a versioned endpoint.
Call the endpoint from your product, scripts, or an agent.
Nodes
What they are
Nodes are the building blocks on the canvas. Each node does one job and passes its output to the next. You add them from the palette and connect them by dragging edges.
Common node types
Input - the entry point that accepts a value from the editor or an API call.
Model / generation - video, image, language, audio, or embedding models. Pick a model per node.
Prompt / transform - reshape text between steps, for example refining a brief into a shot prompt.
Guardrail - redaction, PII, and conditional-routing nodes that handle sensitive data before it reaches a model or an external system.
Output - the value returned by the pipeline. Output nodes define the response contract.
Models
What they are
Every generation node runs a model. Treza reaches models through an OpenAI-compatible backend spanning providers like Together, OpenRouter, Fireworks, and DeepSeek, so you are never tied to one vendor.
Core ideas
One model per node, changeable at any time with no rewrites.
Any model id. Pick from the catalog or type any Hugging Face or OpenRouter model id straight into the node.
Bring your own keys. Provider keys are stored encrypted and used server-side.
See the Models page for the catalog and the Secrets concept for provider keys.
Runs & versions
What they are
A run is a single execution of a pipeline, whether triggered from the editor or over the API. Every run is recorded with per-node timing, token counts, cost, and status.
Core ideas
Run history. Inspect any run node by node to see exactly how a prompt became an output. Filter by trigger (editor vs. API).
Versioning. Each publish creates a new version. You can roll back to an earlier version at any time.
Export. Export run history for SOC 2, HIPAA, or an internal audit.
Published endpoints & API keys
What they are
Publishing a pipeline exposes it as a versioned HTTP endpoint under https://trezalabs.com/api/pipelines/<id>. You authenticate with a Treza API key (treza_live_...), created on the API keys page and sent as a bearer token.
Two ways to call it
Typed -
POST /api/pipelines/<id>/invokewith{ "inputs": { ... } }returns arunId; pollGET .../invoke?runId=...for JSON keyed by the output contract.OpenAI-compatible -
POST /api/pipelines/<id>/chat/completions, a drop-in for any OpenAI SDK, streaming included.
See the Pipeline API reference for full request and response shapes.
Guardrails
What they are
Guardrail nodes handle sensitive data inside a pipeline. The redaction and PII nodes strip personal data before it reaches a model or an external system; conditional-routing nodes branch the graph based on the data.
The same redaction engine is also available as a standalone OpenAI-compatible gateway. See the AI Gateway for details.
Secrets
What they are
The secrets manager stores provider API keys and other credentials your nodes need. Values are envelope-encrypted with KMS at rest, never returned by any API, and injected server-side at run time, so your pipeline can call a provider without your application handling the key.
Billing & credits
What it is
Treza is prepaid credits, with no subscription. You buy a credit pack once (starting at $5), and credits are spent as your pipelines run models. A failed generation costs nothing; if a run stops partway, the steps that finished are charged. New accounts start with $1 in free credits, and purchased credits never expire. Track your balance and spend in billing settings.
Enterprise adds dedicated Treza Enclaves, SSO, and postpaid invoicing. See Plans & Pricing.
Advanced & Enterprise
The building blocks below power guardrails, hardware-attested execution, key management, and on-chain verification. Most pipelines never touch them directly, but they are available when you need hardware isolation, cryptographic attestation, or zero-knowledge identity.
Providers
What they are
Backends capable of running secure enclaves. AWS Nitro Enclaves is the provider available today (additional providers are on the roadmap). Providers expose supported regions and a config schema (e.g., dockerImage, cpuCount, memoryMiB).
Why it matters
Each provider has different runtime limits, compliance certifications, and regional availability. You pick one and pass provider-specific providerConfig when creating an enclave.
Key objects & calls
getProviders() → list all available providers, regions, and config schemas
getProvider(providerId) → fetch details for a specific provider
providerConfig → per-provider runtime settings (validated against schema)
Typical flow
List providers → choose one based on your compliance/region needs
Read provider's configSchema → understand required fields
Validate your config against schema
Create enclave with providerId + providerConfig
Enclaves
What they are
Isolated, attested compute environments that run your container image in a hardware-protected enclave. They provide cryptographically verifiable isolation from cloud operators and other tenants.
Core ideas
Creation: You provide providerId, region, providerConfig (e.g., Docker image + resources), and a sourceType (registry, private-registry, or github)
Ownership: All resources are scoped to your wallet address
Integration: Optionally link a GitHub repo/branch — Treza builds the image for you
Attestation: Every deployed enclave can generate cryptographic proof of its integrity
Key objects & calls
createEnclave(request) → deploy a new enclave
getEnclave(enclaveId) → fetch enclave details and status
getEnclaves(walletAddress) → list all your enclaves
updateEnclave(request) → modify configuration or GitHub connection
deleteEnclave(enclaveId, walletAddress) → permanently remove
getEnclaveLogs(enclaveId, logType, limit) → fetch logs
What runs inside
Your Docker image (from a public registry, a private registry, or built from your GitHub repository and pushed to ECR) plus environment variables you configure through your provider's settings.
When to use
Running sensitive computations that require hardware-level isolation
Processing confidential data (PII, healthcare, financial)
Building zero-trust applications with cryptographic verification
Multi-party computation scenarios
Lifecycle
What it is
The operational state machine that manages enclave deployment, operation, and teardown.
States
Build Flow (GitHub-sourced enclaves only):
PENDING_BUILD → build queued
BUILDING → CodeBuild is building the image from your repo
BUILD_FAILED → build error (see Build logs)
Deployment Flow:
PENDING_DEPLOY → awaiting deployment initiation
DEPLOYING → infrastructure provisioning in progress
DEPLOYED → enclave is running and ready
Pause/Resume Flow:
PAUSING → stopping compute resources
PAUSED → enclave suspended, no compute costs
RESUMING → restarting from paused state
DEPLOYED → back to running state
Termination Flow:
PENDING_DESTROY → awaiting termination initiation
DESTROYING → infrastructure teardown in progress
DESTROYED → final state — enclave removed, resources freed (irreversible)
Error State:
FAILED → deployment or operation error (see error_message)
Actions
pauseEnclave(enclaveId, walletAddress) → stop compute without destroying
resumeEnclave(enclaveId, walletAddress) → restart a paused enclave
terminateEnclave(enclaveId, walletAddress) → permanently destroy (irreversible)
When to use what
Pause
Stop spending temporarily; keep configuration
No compute costs, quick restart
Resume
Bring paused enclave back online
Returns to DEPLOYED state
Terminate
Done with enclave permanently
All data destroyed, cannot undo
Delete
Remove enclave record completely
Enclave must be DESTROYED or FAILED first
Attestation & Verification
What it is
Cryptographic proof that your enclave is running genuine, unmodified code inside a hardware-protected secure enclave. Uses Platform Configuration Registers (PCRs), certificate chains, and signed attestation documents.
Why it matters
Allows you and third parties to verify:
The exact code running in your enclave (via PCR measurements)
The enclave is running in genuine AWS Nitro hardware
No tampering has occurred since deployment
Compliance with security standards (FIPS 140-2, SOC2, HIPAA, etc.)
Key concepts
PCR Measurements
Hardware-generated cryptographic hashes:
PCR0: Hash of the enclave image file
PCR1: Linux kernel and bootstrap hash
PCR2: Application/container hash
PCR8: Signing certificate hash
Attestation Document
Contains:
PCR measurements
X.509 certificate for verification
Certificate authority bundle
Timestamp and module ID
Optional user data and nonce for replay protection
Verification Details
Trust Level: HIGH, MEDIUM, LOW, or UNKNOWN
Integrity Score: 0-100% confidence rating
Verification Status: VERIFIED, PENDING, or FAILED
Compliance Checks: SOC2, HIPAA, FIPS 140-2, Common Criteria
Risk Score: Lower is better (0-100)
Key objects & calls
getAttestation(enclaveId) → retrieve attestation document + verification details
getVerificationStatus(enclaveId) → quick status check
verifyAttestation(enclaveId, request?) → comprehensive verification with checks
generateIntegrationSnippet(enclaveId, language) → code for third-party verification
Typical flow
Deploy enclave → wait for DEPLOYED status
Call getAttestation(enclaveId) → get attestation document
Share verification URL with third parties
Third parties call verification endpoint with optional nonce
Receive trust level, PCR hashes, and compliance status
When to use
Before processing sensitive data: Verify enclave integrity first
Compliance audits: Provide cryptographic proof of secure execution
Multi-party scenarios: Let partners verify your enclave independently
Zero-trust architectures: Continuously verify, never trust blindly
Integration with external systems: Provide verification endpoints to partners
What you get
Tasks
What they are
Scheduled operations that run inside your enclaves. Tasks use cron expressions for flexible scheduling and can automate recurring workloads.
Core ideas
Scheduling: Cron-style expressions (e.g., 0 0 * * * for daily at midnight)
Association: Each task is linked to a specific enclave
Ownership: Scoped to your wallet address
Execution tracking: History of runs with timestamps
States
running → task is active and executing on schedule
stopped → task is paused, not executing
failed → last execution encountered an error
pending → task created but not yet started
Key objects & calls
createTask(request) → create new scheduled task
getTasks(walletAddress) → list all your tasks
updateTask(request) → modify schedule, status, or configuration
deleteTask(taskId, walletAddress) → remove task
Typical flow
Create enclave → wait for DEPLOYED status
Create task with enclaveId, schedule, and description
Task runs automatically on schedule
Monitor via lastRun timestamp and status
Update status: 'stopped' to pause execution
When to use
Batch processing: Run data processing jobs nightly
Health checks: Periodic monitoring and alerts
Data synchronization: Regular backups or sync operations
Scheduled maintenance: Cleanup, archival, or rotation tasks
Report generation: Daily/weekly/monthly automated reports
What you need
Logs & Monitoring
What it is
Comprehensive logging system aggregating logs from multiple sources across your enclave lifecycle.
Log sources
Application Logs
Stdout/stderr from your Docker container. View what your application prints.
ECS Deployment Logs
AWS ECS service logs showing infrastructure-level events (task starting, stopping, health checks).
Step Functions Logs
Workflow orchestration logs from deployment/termination state machines.
Lambda Logs
Execution logs from trigger functions, validators, and error handlers.
Build Logs
CodeBuild output for GitHub-sourced enclaves (clone → build → push to ECR).
Error Logs
Aggregated errors from all sources for quick troubleshooting.
Key objects & calls
getEnclaveLogs(enclaveId, logType, limit) → fetch logs
logType: 'all', 'application', 'ecs', 'stepfunctions', 'lambda', 'build', 'errors'
limit: max entries to return (default 100)
Log structure
When to use what
application
Debugging your container code
ecs
Infrastructure issues (deployment failures)
stepfunctions
Understanding workflow state transitions
lambda
Troubleshooting triggers or validators
build
Following GitHub builds (clone → build → push)
errors
Quick overview of all problems
all
Comprehensive investigation across all sources
Typical flow
Enclave enters FAILED or unexpected state
Call getEnclaveLogs(enclaveId, 'errors', 50)
Identify error source
Call specific log type for detailed context
Fix issue and redeploy
API Keys & Authentication
What they are
Programmatic access credentials for using the Treza SDK. API keys provide scoped permissions and are tied to your wallet address.
Why it matters
Enables CI/CD pipelines, automation scripts, and third-party integrations to manage your enclaves without manual UI interaction.
Permission scopes
enclaves:read → list and view enclave details
enclaves:write → create, update, delete, pause, resume, terminate enclaves
tasks:read → view tasks and execution history
tasks:write → create, update, delete tasks
logs:read → access logs from all sources
Key objects & calls
createApiKey(request) → generate new API key (key shown once!)
getApiKeys(walletAddress) → list your API keys
updateApiKey(request) → change permissions or status
deleteApiKey(apiKeyId, walletAddress) → revoke access
States
active → key is valid and can authenticate requests
inactive → key is disabled but not deleted (can be reactivated)
When to use
CI/CD pipelines: Automate deployments from GitHub Actions, GitLab CI
Infrastructure as Code: Manage enclaves with Terraform or Pulumi
Monitoring systems: Automated health checks and log retrieval
Multi-user scenarios: Different keys for different team members/systems
Security rotation: Regular key rotation without affecting other systems
Best practices
GitHub Integration
What it is
OAuth-based connection linking your enclaves to GitHub repositories and branches. Treza clones the selected repo and branch, builds the Docker image with AWS CodeBuild, and pushes it to a private ECR repository — no local Docker tooling required.
Core ideas
OAuth flow: Secure authentication with GitHub (repo and read:user scopes)
Repository linking: Connect specific repos to enclaves
Branch selection: Choose which branch to build from (defaults to main)
Token management: Access tokens are stored in AWS Secrets Manager for the duration of the build, then deleted
Key objects & calls
getGitHubAuthUrl(state?) → start OAuth flow, get authorization URL
exchangeGitHubCode(request) → exchange OAuth code for access token
getGitHubRepositories(accessToken) → list user's repos
getRepositoryBranches(request) → list branches for a repo
updateEnclave({ githubConnection }) → link GitHub to enclave
GitHub connection object
Typical flow
User initiates GitHub connection in UI
Call getGitHubAuthUrl() → redirect user to GitHub
User authorizes → GitHub redirects with code
Call exchangeGitHubCode({ code }) → get access_token and user info
Call getGitHubRepositories(access_token) → show user their repos
User selects repo → call getRepositoryBranches() → show branches
User selects branch → call updateEnclave() with githubConnection
When to use
Managed builds: Deploy straight from source — Treza builds the image for you
Development workflows: Feature branch → ephemeral test enclave
Team collaboration: Share enclave configs via Git
Version tracking: Each build is tagged with the enclave ID and branch
Private repositories: Build from private repos without exposing credentials
Docker Images
What they are
Container images that define your enclave's runtime environment. Treza supports public Docker Hub images, private registries, and ECR.
Why it matters
Your enclave runs whatever's in the Docker image. The image contains your application code, dependencies, runtime, and configuration.
Key concepts
Image names: library/hello-world, nginx:latest, myorg/myapp:v1.2.3
Tags: Version identifiers (:latest, :v1.0, :sha-abc123)
Registries: Docker Hub (public), ECR (private AWS), custom registries
Key objects & calls
searchDockerImages(query) → search Docker Hub for images
getDockerTags(repository) → list available tags for an image
In provider config
When to use what
Public Docker Hub
Testing, demos, open-source tools
nginx:alpine
Private Docker Hub
Your proprietary apps (small teams)
yourorg/app:latest
AWS ECR
Production workloads, enterprise
123.dkr.ecr.region.amazonaws.com/app:v1
Custom registry
On-prem, air-gapped environments
registry.internal.com/app
Best practices
AI Control Plane (PII Redaction Proxy)
What it is
An OpenAI-compatible proxy that strips PII from your LLM traffic before it reaches the model provider. Your agents send chat completions to a Treza proxy endpoint instead of the provider directly; Treza redacts sensitive entities, forwards the request upstream, and returns the response.
Core ideas
Proxies: Customer-configured redaction endpoints. Each proxy points at an upstream provider (openai, azure-openai, anthropic, or custom) and carries a redaction policy. Select one per request via the x-treza-proxy header.
Redaction policy: Which PII entity types to strip (NAME, EMAIL, PHONE, ADDRESS, SSN, CC, MRN, DOB, ACCOUNT, URL, DATE, SECRET). Custom policies are plan-gated.
Upstream keys: Send your provider API key per-request (x-model-key header) or store it KMS-encrypted on the proxy and let Treza use it server-side.
TEE redaction: On Enterprise, redaction runs inside a Treza Nitro Enclave with hardware attestation; lower tiers use managed software redaction.
Audit trail: Every redaction request is written to an audit log (export is plan-gated).
Key objects & calls
POST /api/redact/chat/completions → OpenAI-compatible chat endpoint with redaction applied
POST /api/redact/run → redact a raw text string, returns detected entities
GET /api/redact/attest → fetch enclave attestation for the redaction pipeline (Enterprise)
/api/proxies → create, list, update, and delete redaction proxies
Typical flow
Create a proxy → choose upstream provider and redaction policy
Point your agent's base URL at the Treza proxy endpoint
Treza redacts PII → forwards to the model → returns the response
Review usage and the audit log in the control plane
When to use
Routing LLM traffic that may contain customer PII
Compliance regimes (HIPAA, GDPR) where prompts can't leave with raw identifiers
Adding redaction to existing OpenAI-based agents with only a base-URL change
Learn more: AI Control Plane
Plans & Billing
What it is
Prepaid credits, with no subscription. You buy credit packs once through Stripe, and your balance is drawn down as pipelines run models.
Credit packs
$5
$5
-
$15
$15
-
$25
$25
-
$50
$52.50
+5%
Core ideas
No subscription: you pay for credits once. Auto top-up, which refills your balance from a saved card when it runs low, is optional and off unless you turn it on.
Model usage: credits are spent as your pipelines run models. A failed generation costs nothing; if a run stops partway, the steps that finished are charged.
Free to start: new accounts begin with $1 in free credits, and purchased credits never expire.
Enterprise: dedicated enclaves, SSO, and postpaid invoicing instead of prepaid credits.
When to use what
Credit packs for everything from first prototype to production pipelines. Enterprise when you need hardware-attested execution, SSO, or invoicing on net terms.
Learn more: Plans & Pricing
Signers & Key Management
What they are
Pluggable signing strategies that decouple transaction signing from private key storage. Instead of storing raw private keys in environment variables or configuration files, you choose a SignerProvider that matches your security requirements. The SDK ships with three built-in signers: EnclaveSigner (production), LocalSigner (development), and BrowserWalletSigner (client-side).
Why it matters
Key isolation: In production, private keys are generated and stored inside Treza Nitro Enclaves. They never leave the hardware-isolated TEE boundary.
Attestation-backed signing: Before each signing operation, the EnclaveSigner can cryptographically verify that the enclave hasn't been tampered with.
Flexibility: Swap between enclave, local, or browser wallet signing with a single config change -- same SDK code, different security posture.
No PII exposure: Private keys never appear in logs, environment variables, or configuration files in production.
Compliance: Hardware-isolated key management satisfies requirements for SOC2, FIPS 140-2, and financial services regulations.
Core ideas
SignerProviderInterface that all signers implement. Defines two methods: getSigner() returns an ethers.js Signer; getAddress() returns the signing address. Any custom key management system (AWS KMS, HashiCorp Vault, hardware wallets) can be integrated by implementing this interface.EnclaveSignerProduction-grade signer that routes signing requests through the Treza Platform API to a Nitro Enclave. The enclave holds the private key in memory-only storage (no persistent disk). Supports attestation verification before signing.LocalSignerDevelopment-only signer that wraps a raw private key string into an ethers.js Wallet. Emits a console warning if used in a production environment. Intended for local development, demos, and automated testing.BrowserWalletSignerClient-side signer that delegates to MetaMask or any injected Web3 wallet (window.ethereum). Prompts the user to approve each transaction. Suitable for dApp frontends.Signer resolution priorityWhen TrezaKYCClient needs to sign a transaction, it resolves a signer using this priority chain:
Explicit signer passed to the method call
signerProvider from blockchain config (recommended)
Deprecated privateKey from blockchain config (backward compat only)
Signing flow (EnclaveSigner)
Your app calls submitProofOnChain() or verifyProofOnChain()
TrezaKYCClient resolves the signer via signerProvider.getSigner()
EnclaveSigner optionally verifies enclave attestation (PCR checks)
Unsigned transaction is sent to the enclave via POST /api/enclaves/{id}/sign/transaction
Enclave signs the transaction inside the TEE and returns the signed bytes
TrezaKYCClient submits the signed transaction to the blockchain
Your app receives the transaction hash
Key objects & calls
SignerProvider interface
getSigner(provider?) -- Returns an ethers.js Signer connected to the given provider
getAddress() -- Returns the signer's Ethereum address
type -- Human-readable signer type name ('enclave', 'local', 'browser-wallet')
EnclaveSigner
Constructor: new EnclaveSigner(platformClient, config)
platformClient -- An authenticated TrezaClient instance
config.enclaveId -- The enclave ID holding the signing key
config.verifyAttestation -- Verify enclave integrity before signing (default: true)
config.attestationNonce -- Optional nonce for replay protection
LocalSigner
Constructor: new LocalSigner(privateKey)
privateKey -- Hex-encoded private key (with or without 0x prefix)
BrowserWalletSigner
Constructor: new BrowserWalletSigner()
No arguments -- connects to window.ethereum on first use
disconnect() -- Clear cached wallet connection
When to use what
EnclaveSigner
Production servers
Inside Nitro Enclave (TEE)
Yes
Backend services, automated systems
LocalSigner
Local development
.env file or environment variable
No
Dev, testing, demos, CI
BrowserWalletSigner
Client-side dApps
User's browser wallet
No
Frontend applications
Custom SignerProvider
Any
Your KMS / HSM / Vault
Optional
Enterprise, custom infrastructure
Configuration examples
Best practices
Always use EnclaveSigner in production -- never store private keys in environment variables, config files, or source code on production servers
Enable verifyAttestation: true (the default) to cryptographically verify enclave integrity before each signing operation
Use LocalSigner only for local development and testing; it emits a warning if NODE_ENV=production
For CI/CD pipelines, consider a custom SignerProvider that integrates with your secrets manager (AWS KMS, HashiCorp Vault, etc.)
The deprecated privateKey field in TrezaKYCConfig.blockchain still works for backward compatibility but will be removed in a future major version
Read-only operations (e.g., isAdult(), getClaims(), hasValidKYC()) don't require a signer at all -- only on-chain write operations need one
States
Connected
Signer resolved and ready
Yes
Attestation verified
Enclave integrity confirmed (EnclaveSigner only)
Yes
Attestation failed
Enclave integrity check failed
No (throws error)
Disconnected
Browser wallet disconnected or enclave unavailable
No (throws error)
Deprecated
Using raw privateKey fallback
Yes (with warning)
KYC & Zero-Knowledge Proofs
What they are
Privacy-preserving identity verification using zero-knowledge cryptography. Users prove they meet KYC requirements (e.g., age verification, identity checks) without revealing underlying personal data. Proofs are cryptographically verifiable, stored in DynamoDB, and optionally anchored on-chain for immutability.
Why it matters
Privacy: Users prove attributes (e.g., "I'm over 18") without sharing passport data, birth dates, or photos.
Compliance: Satisfy regulatory requirements (KYC/AML) while minimizing PII exposure and data breach risk.
Portability: One proof works across multiple services—verify once, use everywhere.
Auditability: Blockchain anchoring provides tamper-proof verification history.
Cost reduction: Eliminate redundant verification flows and reduce storage of sensitive data.
Core ideas
Zero-Knowledge Proofs (ZK)
Cryptographic method proving a statement is true without revealing why. Example: "I'm over 18" without sharing your birth date.
Commitments
64-character hex hash that binds the prover to specific data without revealing it. Acts as a fingerprint for the proof.
Public Inputs
Non-sensitive data visible to verifiers (e.g., commitment hash, proof type). Used to validate the proof without exposing private information.
Proof Lifecycle
Generation: Mobile app or client generates ZK proof from user's credentials
Submission: Proof submitted to Treza API (POST
/api/kyc/proof)Verification: Cryptographic validation + timestamp checks
Storage: Proof stored in DynamoDB with metadata
Blockchain: Optional on-chain submission for immutability
Expiration: Proofs expire after 7 days (configurable)
Key objects & calls
submitProof(request) → Submit new ZK proof for verification
Returns: proofId, blockchainProofId, verificationUrl, expiresAt, chainTxHash
getProof(proofId, includePrivate?) → Retrieve proof details
Returns public data by default; use includePrivate=true for proof signature (requires auth)
verifyProof(proofId) → Verify proof validity and check expiration
Returns: isValid, publicInputs, chainVerified, expiresAt
Proof structure
For Users (Mobile/Client)
User provides credentials (passport, ID, etc.) to mobile app
App generates ZK proof locally using device secure enclave (iOS: Secure Enclave, Android: TEE)
Call
submitProof({ userId, proof, deviceInfo })Receive
proofIdandverificationUrlShare
proofIdwith services requiring KYC verification
For Service Providers (Verifiers)
User provides their
proofIdduring onboardingCall
verifyProof(proofId)to check validityCheck
isValid,chainVerified, andexpiresAtOptionally verify on blockchain using
chainTxHashGrant access based on verification result
For Developers (Integration)
Generate proof on client-side (mobile/web)
Submit to
/api/kyc/proofendpointStore returned
proofIdwith user accountRe-verify periodically using
/api/kyc/proof/{proofId}/verifyHandle expiration by requesting new proof from user
When to use
Age verification
Prove age without revealing birth date or ID documents
Identity checks
Verify user identity without storing PII (GDPR/CCPA compliance)
Financial services
Meet KYC/AML requirements with minimal data exposure
Healthcare
Verify credentials while maintaining HIPAA compliance
Multi-platform access
One proof works across multiple services/platforms
Audit requirements
Blockchain anchoring provides immutable verification trail
International compliance
Satisfy different jurisdictions without data transfer
Validation rules
Commitment
Must be exactly 64 characters
Hex format only (0-9, a-f, A-F)
Unique per user/session
Proof
Minimum 65 characters
Contains cryptographic signature
Generated by trusted client (device secure enclave)
Timestamp
Must be within 1 hour of submission
Prevents replay attacks
Ensures proof freshness
Public Inputs
Array of hex strings
Contains non-sensitive verification data
Minimum 1 input required
States
verified
Proof passed cryptographic verification
✅ Yes
pending
Proof submitted, awaiting blockchain confirmation
✅ Yes
failed
Verification failed (invalid proof or expired timestamp)
✅ Yes
expired
Proof passed expiration date (7 days)
❌ Returns HTTP 410
Integration examples
Privacy-first verification: Prove attributes without revealing sensitive data
Blockchain immutability: Optional on-chain anchoring for audit trails
Automatic expiration: 7-day validity reduces stale verification risk
Device tracking: Platform and version info for security analysis
Flexible verification: Public endpoints for third-party verification
Compliance ready: GDPR, CCPA, HIPAA-friendly architecture
On-Chain Proof Verification (zkVerify)
What it is
Integration with the zkVerify proof-verification chain (via the Horizen Relayer) for verifying ZK proofs on-chain and aggregating them for inexpensive smart-contract verification.
Core ideas
Verification keys: Register a VK once per circuit; reuse the returned vkHash for all subsequent proof submissions
Proof types: groth16 (default), risc0, ultrahonk, ultraplonk, sp1, ezkl
Job lifecycle: Queued → Valid → Submitted → IncludedInBlock → Finalized, then AggregationPending → Aggregated → AggregationPublished
Aggregation: Proofs are batched into a Merkle tree; the aggregation data (Merkle path, domain ID, leaf index, root) lets your smart contract verify the proof via verifyProofAggregation()
Key objects & calls
POST /api/zkverify/register-vk → register a verification key (one-time per circuit)
POST /api/zkverify/submit-proof → submit proof, publicSignals, and vk (defaults: groth16, Sepolia chainId 11155111)
GET /api/zkverify/job-status/{jobId} → poll verification job status
GET /api/zkverify/aggregation/{aggregationId} → fetch aggregation details for on-chain verification
Typical flow
Register your verification key → store the vkHash
Submit a proof → receive a jobId
Poll job status until Finalized / Aggregated
Fetch aggregation details → verify on-chain in your contract
When to use
Anchoring KYC or compliance proofs on-chain without running your own verifier
Reducing on-chain verification cost via proof aggregation
Building smart contracts that consume Treza-issued ZK proofs
Learn more: zkVerify
zkPassport Verification
What it is
Privacy-preserving identity verification from government-issued IDs. Users prove claims about themselves ("I am over 18", "my nationality is X") directly from the NFC chip of their passport or ID card, using zero-knowledge proofs generated on their own phone. No document photos are uploaded, and only the requested claims are revealed.
Core ideas
Server-owned policy: the claim constraints for a verification request are registered with the Treza server before the user scans — the client cannot weaken or modify them
On-device proving: the ZKPassport mobile app reads the document chip via NFC and generates proofs for exactly the requested claims
Claim constraints: disclose, gte, gt, lte, lt, eq, in, out, range over fields like age, nationality, birthdate, document_number
TEE-attested verification: in production, proof verification runs inside an AWS Nitro Enclave and the result can be wrapped in a hardware-signed attestation document
Key objects & calls
POST /api/zkpassport/request → register a verification request and its claim constraints (server-owned policy)
POST /api/zkpassport/verify → verify the proofs generated by the user's device, returns an attestation
GET /api/zkpassport/verify?requestId= → poll the status of a verification request
Typical flow
Browser creates the request with the ZKPassport SDK → displays a QR code
Register the request and its claims with Treza (tamper prevention)
User scans the QR code with the ZKPassport app → proofs generated on-device
Browser submits the proofs to Treza → verification runs server-side (in a TEE in production)
Your app receives an attestation with the claim results
When to use
Age or nationality checks without collecting document data
KYC onboarding with minimal PII exposure
Pairing with zkVerify to anchor verification results on-chain
Learn more: zkPassport
See Also
Build your first pipeline → Go from a prompt to a published API
Models → The model catalog and how to use any model id
Pipeline API → Call a published pipeline over HTTP
Publishing & versioning → Publish, version, and roll back
AI Gateway → The redaction gateway behind the PII guardrail
Plans & Pricing → Pro and Enterprise
Last updated