https://inference.phala.com/v1 uses the TEE-only serving policy: upstream verification and channel binding are required before forwarding. A failed check refuses the request. Ordinary clients still need a verification client to check this from their own machine.
Start with a verification client
- For Node.js or Bun, use the TypeScript ACI verifier:
connectAci(), the scopedaci.fetch, andverifyReceipt()after each response. - For coding agents, use Private AI Proxy: attestation and pinned TLS before traffic, receipt audits after delivery.
- Use Verify a Response to understand the checks and inspect existing artifacts. cURL and
jqinspection alone does not verify them.
Verification workflow
1
Verify the gateway before traffic
Generate a fresh nonce, verify the TDX quote and JCS keyset digest, check
not_after, replay RTMR3 and the measured compose hash, and apply your release policy. Source labels alone are not a trust root.2
Pin the request channel
Use hostname-validated TLS pinned to the SPKI listed for
inference.phala.com in the verified keyset.3
Verify the receipt
Match
workload_keyset_digest, verify the receipt signature under its key_id, and compare request.received.body_hash and response.returned.body_hash with the exact bytes exchanged.4
Audit the cited upstream session
Require
upstream.verified.result: verified and required: true. Recompute the full session’s content address and verify its evidence, channel binding, and claims under your policy.Canonical and legacy endpoints
Use the canonical
/v1/aci/* endpoints for new integrations.

