https://inference.phala.com/v1 requires confidential routing through Phala’s attested gateway. Ordinary HTTP clients do not verify its attestation, pin its TLS key, or verify each response receipt. curl and jq can inspect the artifacts; client-side verification requires the TypeScript ACI verifier or Private AI Proxy.
Choose a verification client
Agent tools, MCP servers, browser automation, and telemetry remain separate trust boundaries.
What the verifier checks
- Verify a fresh nonce-bound gateway quote, recompute the JCS keyset digest, check
not_after, and replay the measured compose evidence. See Attestation. - Before sending model traffic, use hostname-validated TLS pinned to a key in the attested keyset.
- Fetch the receipt named by
x-receipt-idusing the same credential that made the request. Requireworkload_keyset_digestto match the verified keyset. Resolvekey_idinreceipt_signing_keysand verify the Ed25519 signature over the JCS receipt withsignatureremoved. - Match
request.received.body_hashandresponse.returned.body_hashto the exact request and response bytes. For SSE, the response hash includes the complete in-order stream framing. E2EE request hashes follow the transport extension’s restored-plaintext rules. - Require a successful
upstream.verifiedevent withresult: "verified",required: true, and asession_id. Fetch the full session, recompute its bare SHA-256 JCS content address, verify its evidence and binding, and apply your claim policy. The receipt’s serving time must fall within that session’s validity interval.
Inspect existing artifacts
The following commands only display documents for a request you already made. They do not produce a verification verdict.upstream_name (for example chutes or phala-267). The list endpoint accepts ?upstream_name= and ?model=; it omits evidence.data, so fetch the full record for a content-address check.
Release policy and limits
A passing audit binds the exact exchange to a genuine attested gateway, pinned TLS channel, signed receipt, and verified upstream session. It establishes a reviewed release only when you enforce an independently obtained compose allowlist. Workload-declaredsource_provenance is not a trust root. See the SDK release policy.
Legacy signature endpoint
GET /v1/signature/{id} wraps the same canonical receipt for older clients. New integrations should verify /v1/aci/receipts/{id} directly.
